알고리즘/프로그래머스 1단계

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

게임만드는학생 2023. 8. 4. 14:48

https://school.programmers.co.kr/learn/courses/30/lessons/181881

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> arr) {
    int answer = 0;
    
    bool ch=false;
    
    while(true)
    {
        ch=false;
        for(int i=0;i<arr.size();i++)
        {
            if(arr[i]>=50&&arr[i]%2==0){
                arr[i]/=2;ch=true;
            }
            else if(arr[i]<50&&arr[i]%2==1){
                arr[i]*=2;arr[i]++;ch=true;
            }
        }
        if(ch==false)break;
        answer++;
    }
    
    return answer;
}

 

설명

arr 배열의 원소들이 주어진 조건에 의해 계속 바뀐다. 

주어진 조건은 

1. arr[i] 가 50이상이고 짝수면 2로 나눈다.

2. arr[i] 가 50 미만이고 홀수면 2를 곱한 후 1을 더한다. 

이다. 

만약 이 조건으로 원소를 연산한 후에도 연산 전과 모든 원소의 값이 동일하다면 이전까지의 배열에 대해 연산한 횟수를 리턴한다. 

예를 들어, arr배열을 순차적으로 돌며 위의 조건을 적용한다. 그러면 arr(1) 이 된다. 

이 때, arr( 1 ) == arr ( 2 ) 라면 종료하고 1을 리턴한다.