2017 팁스타운 - 예상 대진표

[문제 원본] https://programmers.co.kr/learn/courses/30/lessons/12985

간단한 규칙 찾기 및 구현 문제입니다.

A 참가자와 B 참가자가 토너먼트에 참가했을때, 만나게 되는 round의 값을 리턴해주면 되는 문제입니다.

이겼을 때 다음 번호의 규칙성을 파악하면 쉽게 풀립니다.

  • 1번의 참가자가 이겼을 경우) 다음 번호는 1번
  • 4번의 참가자가 이겼을 경우) 다음 번호는 2번
  • 3번의 참가자가 이겼을 경우) 다음 번호는 2번
  • 15번의 참가자가 이겼을 경우) 다음 번호는 8번
  • 16번의 참가자가 이겼을 경우) 다음 번호는 8번

-> (1) 나누기 2를 한 다음 (2) 올림을 하는 규칙임을 파악할 수 있습니다.
loop를 돌면서 a, b가 같은 번호일 때의 round를 return하면 됩니다.

1
2
3
4
5
6
7
8
9
10
#include <iostream>

int solution(int n, int a, int b) {
for (int round = 1; round < 20; round++) {
a = a / 2 + a % 2;
b = b / 2 + b % 2;
if (a == b)
return round;
}
}

Comments