반응형
풀이
- 해당 문제를 풀면서 역시 대충 예상하고 풀지말자라고 다시 느끼게 됨.
- 처음에 문제 아래에 서로 붙지 않는 경우엔 -1을 하라고 했지만
- 토너먼트인데 서로 붙지 않는 경우가 있을까 해서
- 예외처리 하지 않고 했는데 계속 실패
- 그리고 무조건 앞의 친구가 작을 것으로 대충 생각하고 해서 실패
- 이러한 작은 것들이 하나 둘씩 생각 안하고 풀어 제끼니 계속 틀리지 싶어서 반성...
- 무튼 해당 문제는 위의 것들을 고려하고, N을 계속 2로 나누며 범위를 탐색했고,
- 만약 N이 홀수의 경우엔 가장 마지막 값을 따로 추가 해주면서 아래와 같이 해결.
import java.io.*;
import java.util.*;
public class _1057 {
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 X = Integer.parseInt(st.nextToken());
int Y = Integer.parseInt(st.nextToken());
if (X>Y) {
int tmp = X;
X=Y;
Y=tmp;
}
List<Integer> li = new ArrayList<>(N+1);
List<Integer> now;
for (int i=1; i<=N; i++) li.add(i);
int result = 1;
boolean state = false;
while (N!=1) {
now = new ArrayList<>();
for (int i=0; i<N/2; i++) {
if (li.get(i*2)==X && li.get(i*2+1)==Y) {
state = true;
break;
}
else if (li.get(i*2+1)==X || li.get(i*2+1)==Y) now.add(li.get(i*2+1));
else now.add(li.get(i*2));
}
if (N%2!=0) now.add(li.get(li.size()-1));
if (state) break;
li = new ArrayList<>(now);
if (N%2==0) N/=2;
else N = N/2+1;
result++;
}
System.out.println(state?result:-1);
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 19532번] 수학은 비대면강의입니다 (0) | 2024.11.11 |
---|---|
[백준, 자바, 1977번] 완전제곱수 (0) | 2024.11.10 |
[백준, 자바, 1541번] 잃어버린 괄호 (0) | 2024.11.08 |
[백준, 자바, 14940번] 쉬운 최단거리 (0) | 2024.11.01 |
[백준, 자바, 12852번] 1로 만들기 2 (0) | 2024.11.01 |