Algorithm/문제풀이
[백준] 1057번: 토너먼트
manzoo
2019. 7. 5. 17:09
문제링크 : https://www.acmicpc.net/problem/1057
문제풀이
문제에서 라운드마다 번호가 1부터 다시 매겨진다고 했던 것이 힌트인 것 같다.
테스트 케이스를 예로 들면, 8번 9번은 라운드가 끝날 때 마다 아래와 같이 번호가 바뀐다.
8 → 4 → 2 → 1
9 → 5 → 3 → 2
결국 김지민과 임한수의 번호가 같게 되면, 그 라운드에서 대결을 하게 된다.
서로 대결을 하지 않는 경우 -1을 출력하라고 해서 while문에 조건을 어떻게 추가해야 하나 고민했는데..
김지민과 임한수는 서로 대결하기 전까지 항상 이긴다는 조건이 있으므로, 대결을 하지 않는 경우는 없는 것 같다.
소스코드
package baekjoon; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.io.IOException; public class P1057 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int count = 0; while (a != b) { a = (a + 1) / 2; b = (b + 1) / 2; count++; } System.out.println(count); br.close(); } }