본문 바로가기
코딩테스트 준비/프로그래머스

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

by 스테디코디스트 2023. 10. 18.
반응형

<문제 소개>


<소스 코드>

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> arr) 
{
    int x = 0;
    
    while(true)
    {
        vector<int> prevArr = arr; // 이전 배열
        
        for(int i = 0; i < arr.size(); i++)
        {
            if(arr[i] >= 50 && arr[i] % 2 == 0)
            {
                // 50보다 크거나 같고, 짝수인 경우
                arr[i] /= 2;
            }
            else if(arr[i] < 50 && arr[i] % 2 == 1)
            {
                // 50보다 작고, 홀수인 경우
                arr[i] = arr[i] * 2 + 1;
            }
        }
        
        // 정렬
        sort(prevArr.begin(), prevArr.end());
        sort(arr.begin(), arr.end());

        if(prevArr == arr) return x;   
            
        x++;
    }
}

<풀이과정>

1. 작업의 반복횟수 x를 정의하고 x는 항상 존재하므로 무한 루프 while문을 이용해 x를 찾을 때까지 반복을 진행한다.

2. 매 반복마다 prevArr라는 이전 배열에 현재 배열을 저장하고 현재 배열 arr를 다음 배열로 바꿔준다.

3. for문을 이용해 arr를 돌면서 주어진 조건에 맞게 원소들을 바꿔준다.

4. 다음 배열을 구했다면 prevArr와 arr가 같은지 확인하기 위해 먼저 원소들을 정렬시켜준다.

5. 이후 두 배열이 같다면 x를 리턴하고 아니라면 x를 증가시키고 다음 반복을 진행한다.


<코멘트>

배열끼리 어떻게 같은지 확인하지? 생각하다가 혹시 '==' 연산자로 되나해서 해봤는데 이게 되네..?ㅋㅋ 했다.


<제출결과>