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

👀 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWjlH0k63joDFAVT

👊 도전

1. 설계

  1. 어떤 자리를 선택하던 실행 횟수는 같으므로 각 자리수를 스택에 넣은 후 계산한다.
  2. 실행 횟수가 홀수라면 A가, 짝수라면 B가 이긴다.

2. 구현

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
32
33
34
35
36
37
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
class Main {
	static int[] maxRoom;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++)
		{
			String[] num=sc.next().split("");
			Stack<String> st=new Stack<>();
			for(String n:num) st.push(n);
			
			int cnt=0;
			while(st.size()>1) {
				int sum=Integer.parseInt(st.pop())+Integer.parseInt(st.pop());
				String[] str=String.valueOf(sum).split("");
				for(String s:str) st.push(s);
				cnt++;
			}
			
			String answer="";
			if(cnt%2==0) answer="B";
			else answer="A";
			
			System.out.println("#"+test_case+" "+answer);
		}
	}
	
	
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 숫자의 덧셈 규칙 실행 횟수를 구한다
    • 어느 자리를 선택하여 더하던 실행 횟수는 같다.
    • 따라서 스택에 각 자리수를 넣은 후 두 개씩 뽑아서 계산하고 cnt로 카운트한다.
    • 더한 sum이 10 이상이면 각 자리수의 숫자를 스택에 넣어야 하는 것을 염두한다.
  2. 승리자를 찾는다
    • cnt가 짝수라면 B가 이긴 것이고, 홀수라면 A가 이긴 것과 같다.

👏 해결 완료!