<Algorithm> 126. 이상한 나라의 덧셈게임(SWExpert)
by BFine반응형
1. 이상한 나라의 덧셈게임(SWExpert)
수학 문제
처음에 최선의 선택만 보고 그리디로 접근을 했더니 경우의 수가 너무 많았다. 그래서 아래의 블로그에서 힌트를 보고 풀 수 있었다.
이 게임은 숫자가 주어지는 순간 게임의 승패가 결정 되어있었다. 더하기이므로 어느 위치를 더해도 결과는 정해져 있다.
제출할때 계속 런타임에러가 발생해서 상당히 애먹었는데 처음에는 1000자리 이하 인 줄 알고 nextInt로 했는데 알고보니 10^999 자리까지 input이 들어와 int형으로 받을 수가 없었다. 그래서 단순하게 Double로 바꿨는데 그래도 런타임에러가 발생했다. double 이 어느정도 넘어가면 chatAt에서 len와 맞지 않는 문제가 있엇고 결국 String 형으로 받아서 처리 했다.
문제에서 이상한나라로 표현한게 이문제의 힌트였던 것 같고 풀면서 되게 신기했다.
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import java.util.Scanner; import java.util.Stack; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); /****************************** * Stack를 이용해서 덧셈의 위치 상관없이 * (여기서는 뒤로) 두개의 숫자를 pop해서 * 더하고 10이상이면 두자리수를 각각 push하고 * 이하면 한자리를 push해서 Stack 크기가 * 1이 될때까지 돌린 후 2로 나눴을때 * 짝수면 B 홀수면 A를 출력한다. *******************************/ int T = Integer.parseInt(sc.nextLine()); for(int t = 0; t < T; t++ ) { String num = sc.nextLine(); int len = num.length(); Stack<Integer> st = new Stack<>(); if(len == 1) { System.out.println("#"+(t+1)+" B"); continue; } for(int i = 0; i < len; i++) { st.add(num.charAt(i)-'0'); } int step = 0; while(st.size() != 1) { int sum =st.pop()+st.pop(); if(sum < 10) { st.push(sum); }else { st.push(sum/10); st.push(sum%10); } step++; } String res = (step%2==0)?"B":"A"; System.out.println("#"+(t+1)+" "+res); } } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 128. 러시아 국기 같은 깃발(SWExpert) (0) | 2019.03.03 |
---|---|
<Algorithm> 127. 킹(BJO) (0) | 2019.03.02 |
<Algorithm> 125. 성수의 프로그래밍 강좌 신청(SWExpert) (0) | 2019.02.26 |
<Algorithm> 124. 수제버거장인(SWExpert) (0) | 2019.02.25 |
<Algorithm> 123. 이상한 피라미드 탐험(SWExpert) (0) | 2019.02.24 |
블로그의 정보
57개월 BackEnd
BFine