코딩 테스트/프로그래머스

프로그래머스 - 다트 게임 문제 (자바)

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

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

굉장히 단순하게 풀이한 문제로 리팩토링을 통해서 조금더 코드를 다듬을 수 있을거 같지만 일단 글을 쓸려고 합니다.ㅎ

기본적으로 숫자면 stack에 넣고 문자일 경우 문자별 처리를 다르게 가져가서 처리했습니다.

주의할 점으로

숫자가 10까지 있어서 10인 경우 check가 필요하다는 점

스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. 즉 stack에 값이 하나 밖에 없는데 스타상이 나온 경우를 신경 써야 한다는 점

import java.util.Stack;

// 프로그래머스 다트 게임 문제
class Solution {
    public int solution(String dartResult) {
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < dartResult.length(); i++) {
            char c = dartResult.charAt(i);
            if (c == 'S') {
                continue;
            }

            if (c == 'D') {
                stack.add((int) Math.pow(stack.pop(), 2));
                continue;
            }

            if (c == 'T') {
                stack.add((int) Math.pow(stack.pop(), 3));
                continue;
            }

            if (c == '*') {
                int now = stack.pop();
                if (!stack.isEmpty()) {
                    stack.add(stack.pop() * 2);
                }
                stack.add(now * 2);
                continue;
            }

            if (c == '#') {
                stack.add(stack.pop() * -1);
                continue;
            }

            if (c - '0' == 1 && dartResult.charAt(i + 1) == '0') {
                stack.add(10);
                i++;
            }else {
                stack.add(c - '0');
            }
        }

        int answer = 0;
        for (int score : stack) {
            answer += score;
        }
        return answer;
    }
}