알고리즘 스터디 7월 2주차 문제1 (다트게임)

문제#

  • 링크로 대체

풀이 및 주저리..

카카오 블라인드 문제중 쉬운 문제에 속하는 문제이다. 처음 풀 때 막혔던 부분은 10까지를 고려하지않아서 발생한 문제였다.. 그리고 그다음 발생한 문제는 *이 나올 경우 그전의 계산값만 곱하기 처리를 해줘야하는데 전체에 적용하는 방식으로 문제를 풀어버린 것이다.. 최근에 SSAFY 교육과 개인적인 일들 때문에 알고리즘에 너무 소홀히하고 있는데.. 후에 본격적으로 알고리즘 교육이 시작될 때나 곧 다가오는 코테가 걱정이다. 좀 더 시간을 쪼개봐야겠다.

코드

package programmers.kakao.blind2018;

import java.util.Stack;

public class DartGame {
    public int solution(String dartResult) {
        int answer = 0;
        Stack<Integer> answerStk = new Stack<>();
        for (int i = 0; i < dartResult.length(); i++) {
            char c = dartResult.charAt(i);
            if (c >= '0' && c <= '9') {
                if (c == '1') {
                    char next = dartResult.charAt(i + 1);
                    if (next == '0') {
                        answerStk.push(10);
                        i++;
                        continue;
                    }
                }
                answerStk.push(Character.getNumericValue(c));
            } else if (c == '#') {
                answerStk.push(answerStk.pop() * -1);
            } else if (c == '*') {
                Stack<Integer> tempStk = new Stack<>();

                for (int j = 0; j < 2; j++) {
                    if (!answerStk.isEmpty()) {
                        tempStk.push(answerStk.pop() * 2);
                    }
                }
                for (int z = 0; z < 2; z++) {
                    if (!tempStk.isEmpty()) {
                        answerStk.push(tempStk.pop());
                    }
                }
            } else if (c == 'S') {

            } else if (c == 'D') {
                answerStk.push((int) Math.pow(answerStk.pop(), 2));
            } else if (c == 'T') {
                answerStk.push((int) Math.pow(answerStk.pop(), 3));
            }
        }
        for (int i : answerStk) {
            answer += i;
        }
        return answer;
    }
}

기억에 남길 것!

  • 문제좀 똑바로 읽기..
© 2020 JunhoBaik, Built with Gatsby