[프로그래머스] 예상 대진표
이 포스트는 프로그래머스 사이트의 예상 대진표 문제 풀이입니다.
문제
해결 과정
이 문제는 수학 연산을 통해서 간단하게 해결할 수 있는 문제입니다.
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;
}
제출 결과
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.