본문 바로가기
프로그래머스코딩테스트연습풀이/C++

[프로그래머스/C++] 1로 만들기

by 코코쵸마 2025. 3. 6.

문제

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

10 / 2 = 5
(5 - 1) / 2 = 2
2 / 2 = 1
위와 같이 3번의 나누기 연산으로 1이 되었습니다.

정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.

 

솔루션

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> num_list) {
    int answer = 0;
    for(auto n:num_list){
        while(1){
            if(n==1){
                break;
            }
            answer++;
            if(n%2==0){
                n/=2;
            }
            else{
                n = (n-1)/2;
            }
        }
    }
    return answer;
}

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr