포스트

[프로그래머스] 예상 대진표

이 포스트는 프로그래머스 사이트의 예상 대진표 문제 풀이입니다.

문제

문제


해결 과정

이 문제는 수학 연산을 통해서 간단하게 해결할 수 있는 문제입니다.

A 선수와 B 선수가 경기를 진행하려면 두 선수의 번호는 인접한 숫자이고
두 선수 중 작은 번호를 받은 숫자가 홀수이어야 두 선수가 만날 수 있습니다.

만약 인접하지 않고, 작은 수가 홀수가 아니라면 토너먼트를 진행해야 합니다.

토너먼트 진행에서는 모든 인원 수가 반드시 짝수이며 진행 후에도 절반이 줄어든 짝수이므로
이를 이용해 문제를 해결할 수 있습니다.

제출 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>

using namespace std;

int solution(int n, int a, int b) {
    int answer = 1;
    
    while(abs(a - b) != 1 || min(a, b) % 2 == 0) {
        answer += 1;
        a = (a + 1) / 2;
        b = (b + 1) / 2;
    }

    return answer;
}

제출 결과

01

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.