https://www.acmicpc.net/problem/1057
1057번: 토너먼트
김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
(1,2) , (3,4) , (5,6) .... 이렇게 매칭이 되고 승자는 다음 라운드에 1 , 2 , 3, ... 이렇게 되기에 규칙을 찾았습니다.
때문에 (x+1) % 2이 다음 라운드의 번호가 되게 됩니다.
즉 김지민과 임한수가 1 차이 날 때 까지 위의 공식을 대입하면 됩니다. 또한, 1 차이만 나는 것이 아니라 큰 값이 짝수여야만 매칭이 되기에 이를 고려해서 작성해 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_1057 {
private static final int NOT_FOUND = -1;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int a = stoi.apply(st.nextToken());
int b = stoi.apply(st.nextToken());
if(a > b){
int temp = a;
a = b;
b = temp;
}
int cnt = 1;
while(a < b){
if(a+1 == b && b % 2 == 0){
break;
}
a = (a+1)/2;
b = (b+1)/2;
cnt++;
}
System.out.println(cnt);
}
}
'알고리즘' 카테고리의 다른 글
백준 1213번 팰린드룸 만들기 (JAVA) (0) | 2023.09.16 |
---|---|
백준 23029번 시식 코너는 나의 것(JAVA) (0) | 2023.09.15 |
백준 1080번 행렬 (JAVA) (0) | 2023.09.13 |
백준 2161번 카드1 (JAVA) (0) | 2023.09.12 |
백준 10810번 공 넣기 (JAVA) (0) | 2023.09.11 |