본문 바로가기

Algorithm/문제풀이

[백준] 1057번: 토너먼트

문제링크https://www.acmicpc.net/problem/1057

 

문제풀이

문제에서 라운드마다 번호가 1부터 다시 매겨진다고 했던 것이 힌트인 것 같다.

테스트 케이스를 예로 들면, 8번 9번은 라운드가 끝날 때 마다 아래와 같이 번호가 바뀐다.

8 → 4 → 2 → 1

→ 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();
	}
}

'Algorithm > 문제풀이' 카테고리의 다른 글

[백준] 2217번: 로프  (2) 2019.07.12
[백준] 11812번: K진 트리  (0) 2019.07.12
[백준] 1149번: RGB거리  (0) 2019.07.05
[백준] 2562번: 최댓값  (0) 2019.07.05
[백준] 2164번: 카드2  (0) 2019.07.05