본문 바로가기
정리/알고리즘

프로그래머스 - 다트 게임

by Hudini30 2022. 5. 2.

프로그래머스 - 다트 게임

해당 문제는 큐와 스택을 통해 풀 수 있었습니다. 계산할 숫자와 부호를 문자열에서 분리해 큐에 넣은 뒤 큐에서 데이터를 가져오면서 숫자인 경우에는 스택에 데이터를 넣고 그외 부호인 경우 규칙에 맞게 이전값을 2배로 한다거나 값을 음수로 바꾸거나 하는 로직을 거쳐 최종적으로 스택의 담긴 모든 값을 더해주며 답을 구했습니다.

public int solution(String dartResult) {
        int answer = 0;

        Queue<String> dartQueue = new LinkedList<>();
        Stack<Integer> dartStack = new Stack<>();

        String temp = "";
        for (int i = 0; i < dartResult.length(); i++) {
            char tempChar = dartResult.charAt(i);
            if (Character.isDigit(tempChar)) {
                temp += tempChar;
            } else {
                if (!temp.isEmpty()) {
                    dartQueue.add(temp);
                }
                dartQueue.add(String.valueOf(tempChar));
                temp = "";
            }
        }
        while (!dartQueue.isEmpty()) {
            String data = dartQueue.poll();
            if (data.equals("*")) {
                Integer currentNumber = dartStack.pop();
                if (!dartStack.isEmpty()) {
                    Integer preNumber = dartStack.pop();
                    dartStack.push(preNumber * 2);
                }
                dartStack.push(currentNumber * 2);
            } else if (data.equals("#")) {
                Integer currentNumber = dartStack.pop();
                dartStack.push(currentNumber * (-1));
            } else if (data.equals("S")) {
                Integer currentNumber = dartStack.pop();
                dartStack.push(currentNumber);
            } else if (data.equals("D")) {
                Integer currentNumber = dartStack.pop();
                dartStack.push(currentNumber * currentNumber);
            } else if (data.equals("T")) {
                Integer currentNumber = dartStack.pop();
                dartStack.push(currentNumber * currentNumber * currentNumber);
            } else {
                dartStack.push(Integer.valueOf(data));
            }
        }

        while (!dartStack.isEmpty()) {
            answer += dartStack.pop();
        }

        return answer;
    }

댓글