Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

시간이 NullNull

[JAVA] [SWEA] 6959. 이상한 나라의 덧셈게임 본문

알고리즘

[JAVA] [SWEA] 6959. 이상한 나라의 덧셈게임

4NIng 2019. 5. 11. 01:18

앨리스와 토끼는 덧셈을 이용한 간단한 게임을 같이 하기로 했다.

먼저 어떤 양의 정수를 하나 정해 그 수로 게임을 시작한다.

둘은 서로의 차례에 인접한 두 자리를 선택하고, 이 두 자리를 선택된 두 숫자의 합으로 교체하여 상대에게 차례를 넘긴다.

예를 들어, “1234”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “154”가 된다.

“5678”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “5138”이 된다.

이렇게 차례를 반복 하다가 자기 차례에 넘어온 수가 한 자리가 되면 그 사람이 패배하게 된다.

게임을 시작할 때의 정수가 주어진다.

앨리스가 먼저 차례를 가지고,

서로 최선을 다해 게임을 한다고 할 때 어떤 사람이 게임에서 승리하게 될 것인지 구하는 프로그램을 작성하라.

 

이 문제의 함정의 경우 "서로 최선을 다해 게임을 한다" 이다.

 

사실상 누가 어떻게 게임을 하든 이 게임의 승패는 숫자가 주어진 순간 결정되게 되는데

 

이것의 경우 실제로 테스트 케이스 하나를 가지고 모든 경우를 실험하게 될 경우 어떻게 하든 한명이 이기게 되고

 

게임 횟수 차이 또한 2의 배수가 차이날 뿐 결과는 동일하다. 이를 통해서 나는 4자리 숫자를 한 숫자씩 쪼개어 스택에

 

넣었고 이를 숫자 두개를 꺼내어 계산을 하고 숫자를 더할 때마다 횟수를 세우고

 

마지막에 횟수를 2로 나누어 나머지의 수를 가지고 승패를 판단하였다.

 

코드는 다음과 같다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Solution {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine());
		int cnt = 0;
		int sum = 0;
		Stack<Integer> stack = null;
		String s = "";
		int pop1 = 0;
		int pop2 = 0;
		for(int t=1; t<=T; t++) {
			cnt = 0;
			s = br.readLine();
			stack = new Stack<Integer>();
			for(int i=0; i<s.length(); i++) {
				stack.push(Integer.parseInt(s.substring(i, i+1)));
			}
			while(stack.size() != 1) {
				pop1 = stack.pop();
				pop2 = stack.pop();
				sum = pop1 + pop2;
				while(true) {
					cnt++;
					if(sum < 10) break;
					sum = Integer.parseInt( (sum+"").substring(0, 1) )+ Integer.parseInt((sum+"").substring(1, 2));
				}
				stack.push(sum);
			}
			
			if(cnt % 2 == 0) bw.write("#"+t+" B\n");
			else bw.write("#"+t+" A\n");
		}
		br.close();
		bw.close();
	}
}
Comments