코딩테스트/Programmers

[프로그래머스] 다트 게임

grove1212 2025. 3. 5. 15:32

https://school.programmers.co.kr/learn/courses/30/lessons/17682

1. 내 풀이

이전 수를 int에 따로 저장해서 검사했다.

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int prevNum = 0;
        
        for(int i = 0; i < dartResult.length() ; i++){
            // 점수
            char ch = dartResult.charAt(i++);
            int num;
            if(ch == '1' && dartResult.charAt(i) == '0'){ i++; num = 10; }
            else num = ch - '0';
            
            // 보너스
            ch = dartResult.charAt(i);
            if(ch == 'S');
            else if(ch == 'D') num = (int)Math.pow(num, 2);
            else if(ch == 'T') num = (int)Math.pow(num, 3);
            
            // 옵션
            if(i + 1 < dartResult.length()){
                ch = dartResult.charAt(i+1);
                if(ch == '*') {
                    num *= 2;
                    prevNum *= 2;
                    i++;
                }
                else if(ch == '#') {
                    num *= -1;
                    i++;
                }
            }
            
            answer += prevNum;
            prevNum = num;
        }
        answer += prevNum;
        return answer;
    }
}

 

 

2. 다른 분 풀이 - stack 사용

Character.isDigit(c)를 활용해 숫자인지를 알 수 있다.

stack을 사용해 편리하게 값을 넣었다 뺐다 하고있다.

import java.util.*;
class Solution {
    public int solution(String dartResult) {
        Stack<Integer> stack = new Stack<>();
        int sum = 0;
        for (int i = 0; i < dartResult.length(); ++i) {
            char c = dartResult.charAt(i);
            if (Character.isDigit(c)) {
                sum = (c - '0');
                if (sum == 1 && i < dartResult.length() - 1 && dartResult.charAt(i + 1) == '0') {
                    sum = 10;
                    i++;
                }
                stack.push(sum);
            } else {
                int prev = stack.pop();
                if (c == 'D') {
                    prev *= prev;
                } else if (c == 'T') {
                    prev = prev * prev * prev;
                } else if (c == '*') {
                    if (!stack.isEmpty()) {
                        int val = stack.pop() * 2;
                        stack.push(val);
                    }
                    prev *= 2;
                } else if (c == '#') {
                    prev *= (-1);
                }
                // System.out.println(prev);
                stack.push(prev);
            }
        }
        int totalScore = 0;
        while (!stack.isEmpty()) {
            totalScore += stack.pop();
        }
        return totalScore;
    }
}