예상 대진표 - C++

 

프로그래머스

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

programmers.co.kr

각 라운드가 진행될 때마다 참가자는 절반으로 줄어든다.

1 vs 2에서 2가 승리하면 다음 라운드에서는 1번, 5 vs 6에서 5가 승리한다면 다음 라운드에서는 3번.....

이런 형식이 아래 그림처럼 반복된다.

그림을 보면 현재 라운드의 승자는 다음 라운드에서 (현재 번호 + 1) / 2의 번호를 부여받는 다는 것을 알 수 있다.

이를 이용해 아래와 같은 방식으로 코드를 작성하였다.

 

 

풀이 방법

1. 반복문을 돌 때마다 answer++을 해주며 a == b면 answer를 리턴한다.

2. a != b면 다음 라운드로 넘어가므로 a와 b의 번호를 (현재 번호 + 1) / 2를 해준다.

#include <iostream>

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 0;
    
    for(int i = 1;;i++, answer++) {
        if(a == b) return answer;
        a = (a + 1) / 2;
        b = (b + 1) / 2;
    }
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

멀리 뛰기/C++  (0) 2023.01.10
점프와 순간 이동/C++  (0) 2023.01.10
N개의 최소공배수/C++  (0) 2023.01.10
구명보트/C++  (1) 2023.01.10
영어 끝말잇기/C++  (0) 2023.01.10

+ Recent posts