[프로그래머스 / C++] 조건에 맞게 수열 변환하기 2

YH·2023년 12월 2일
0

문제

조건에 맞게 수열 변환하기 2 : 문제 링크


문제 분석

  • 정수 배열 arr가 주어진다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더한다. 이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)x가 항상 존재한다. 이러한 x중 가장 작은 값을 return
  • 두 배열이 같은지 확인하기 위해 작업 이전 배열을 임시로 저장할 정수형 벡터 check를 arr로 복사하여 초기화. 반복 횟수를 저장할 정수형 변수 count를 0으로 초기화. while loop의 조건문을 1로 설정하여 반복 횟수를 return 할때까지 순환하고, for loop를 통해 arr의 첫번째부터 마지막원소까지 순환. if ~ else if문을 통해 각 원소에 대해 연산을 수행하여 값을 저장. 연산을 수행할때 마다 count를 1씩 늘리고, if ~ else 문을 통해 check와 arr이 같은지 확인 후 같을 경우 count - 1을 return. 다를 경우 check에 arr을 저장하고 while loop 반복

풀이

#include <vector>

using namespace std;

int solution(vector<int> arr) {
    vector<int> check = arr;
    int count = 0;
    
    while(1) {
        for(int i = 0; i < arr.size(); ++i) {
            if(50 <= arr[i] && arr[i] % 2 == 0) arr[i] /= 2;
            else if(arr[i] < 50 && arr[i] % 2 == 1) {
                arr[i] *= 2;
                arr[i] += 1;
            }
        }
        count++;
        if(check == arr) return count - 1;
        else check = arr;
    }
}
profile
Keep Recycling Your Dreams

0개의 댓글