백준 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);
    }
}

총평

후기

사실, 굳이 토너먼트 방식이 아니라 전체 수를 다 더한 값이 홀수인지 짝수인지 판별해도 된다.

개선할 점