백준 20154 - 이 구역의 승자는 누구야?!
Updated:
Java
20154 번 - 이 구역의 승자는 누구야?!
문제
접근 방법
토너먼트 방식을 Deque으로 해결하였다.
각 라운드마다 짝을 지을 사람 수를 정해 놓고, 그 수만큼 반복하여 2명씩 짝을 지어 횟수를 더한다.
짝을 지어 계산 된 수를 deque의 마지막에 넣는 방식으로 계산하다 deque의 크기가 1이 될 때 종료하도록 하였다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
String str = br.readLine();
int[] alpha = {3, 2, 1, 2, 3, 3, 3, 3, 1, 1, 3, 1, 3, 3, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1};
Deque<Integer> deque = new ArrayDeque<Integer>();
for(int i = 0; i < str.length(); i++) {
deque.add(alpha[str.charAt(i) - 'A']);
}
int size = deque.size();
int a, b;
while(true) {
if(size == 1)
break;
for(int i = 0; i < size; i += 2) {
if(i == size - 1) { // 짝이 지어지지 않은 수
deque.addLast(deque.pollFirst());
break;
}
a = deque.pollFirst();
b = deque.pollFirst();
deque.addLast((a + b) % 10);
}
size = deque.size();
}
result = deque.poll();
if(result % 2 == 1)
System.out.println("I'm a winner!");
else
System.out.println("You're the winner?");
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
총평
후기
사실, 굳이 토너먼트 방식이 아니라 전체 수를 다 더한 값이 홀수인지 짝수인지 판별해도 된다.