BOJ_1057_토너먼트_JAVA
문제 : 토너먼트
링크 : BOJ_1057_토너먼트
접근 방식
간단한 시뮬레이션 문제이다. 토너먼트의 참여 멤버가 총 16명이라고 가정을 해보자.
(1,2) (3,4) (5,6) (7,8) (9,10) (11,12) (13,14) (15,16)
이렇게 짝이 지어진다. 짝이 지어지는 수들의 공통점은, 두 수의 차이가 1이면서 2로 나누었을 때 서로 다른 수를 가진다는 것이다.
주어진 문제는 A와 B가 각각 다른 위치에서 경기를 시작할 때, 몇 라운드에서 만나는지 찾아야 한다. 따라서 각 수를 짝수의 경우 1/2, 홀수의 경우 1/2+1하여 축소시켜가면서 카운팅을 하고, 멈추는 시점은 두 수의 차이가 1이면서 2로 나누었을 때 서로 다른 수를 가지면 멈추도록 하면 된다.
소스 코드
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
public class BOJ_1057_토너먼트 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int cnt =1;
if(Math.abs(A-B) == 1 && A/2 != B/2) {
System.out.println(cnt);
return;
}
while(N > 2) {
if(Math.abs(A-B) == 1 && A/2 != B/2) {
System.out.println(cnt);
return;
}
if(A %2 == 0) {
A = A/2;
}else {
A = A/2+1;
}
if(B%2 == 0) {
B = B/2;
}else {
B = B/2+1;
}
cnt++;
}
}
}