코딩 테스트/C++

프로그래머스, C++) Lv 2. 예상 대진표

나무늘보섬 2025. 11. 8. 17:46

문제

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

 

프로그래머스

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

programmers.co.kr

 

틀린 코드 -> while문의 종료조건 때문에 시간 초과가 나는 테스트 케이스들이 존재

더보기

#include <iostream>
using namespace std;

/*

while문으로 계속 2로 나눈 몫으로 a,b의 숫자가 유지됨. 
+ 항상 이긴다고 가정 -> 안만나는 경우는 x
출력 : round
*/

int solution(int n, int a, int b)
{
    int round = 1; // 라운드
    if(a>b)
        swap(a,b);
    
    while(a>0 && b>0)
    {
        if(a%2 == 1)
        { 
            a++; 
        } 
        a/=2;
        
        if(b%2==1)
        {
            b++;
        }
        b/=2;
        
        if((b-a ==1) && a%2== 1 && b%2==0)
        {
            break;
        }
        else
            ++round;
    }
    
    return round+1;
}

 


알맞은 코드 -> 더 간단히 수정됨

더보기

#include <iostream>
using namespace std;

/*

while문으로 계속 2로 나눈 몫으로 a,b의 숫자가 유지됨. 
+ 항상 이긴다고 가정 -> 안만나는 경우는 x
출력 : round
*/

int solution(int n, int a, int b) {
    int round = 0;
    while (a != b) {
        a = (a + 1) / 2;  // == ceil(a/2)
        b = (b + 1) / 2;  // == ceil(b/2)
        ++round;
    }
    return round;
}