티스토리 뷰

728x90

문제

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

토너먼트 게임에서 총 참가자 수 n명, 라이벌 a, b의 토너먼트 위치번호가 주어진다. 예를들어서 8명이라고 치면 1번과 2번, 3번과 4번.. 7번과 8번이 경기를 치루는 식으로 토너먼트가 진행 됬을 때, a랑 b가 몇 라운드에서 서로 붙는지 return 하는 문제

제한사항
  • N : 21 이상 220 이하인 자연수 (2의 지수 승으로 주어지므로 부전승은 발생하지 않습니다.)
  • A, B : N 이하인 자연수 (단, A ≠ B 입니다.)

입출력 예
N A B answer
8 4 7 3

접근방법

한번 경기를 치루고 나면 a 선수의 순번은 a/2 + a%2 라는것을 알게 되었다.

그리고 결국 경기를 치룰 때의 각 순번을 2로 나눴을 때의 몫이 같을 때 서로 붙어있을 것이라고 생각을 했다. 하지만 붙어 있을 때의 위치가 1,2 처럼 서로 붙는 경우랑 2,3 처럼 서로 붙지 않는 경우가 있다.

a(몫) b(몫) round
4(2) 7(3) 0
2(2) 4(2) 1
1(0) 2(1) 2
1(0) 1(0) 3

2, 3 일 경우 2와 3은 몫이 같지만 2번의 라운드에서 서로 만나야 한다. 그리곤 a와 b가 다르다는 추가조건을 알게 되어 위 문제를 해결하였다.

a b round
2(1) 3(1) 0
1(0) 2(1) 1
1(0) 1(0) 2

코드

728x90
댓글