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

1 분 소요

문제 링크

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


풀이 과정

주어진 문자열의 각 문자를 S, D, T, *, #, 숫자 로 구분해 다른 작업을 하도록 구현했습니다.

숫자 일 경우 tmp 문자열 뒤에 계속 붙여나갑니다. S, D, T 를 만나면 각각 1승, 2승, 3승 연산을 해준 뒤 배열 요소에 저장합니다. * 를 만나면 해당 점수와 (이전 기록이 있다면) 이전 점수에 두 배 연산을, # 를 만나면 해당 점수에 -1를 곱해줍니다.


코드

public class Main {
    public static int solution(String dartResult) {
        int answer = 0;
        int cnt = 0;
        int idx = 0;
        int[] subScore = new int[3];
        String tmp = "";
        int len = dartResult.length();

        while (idx < len) {
            char now = dartResult.charAt(idx++);

            switch (now) {
                case 'S':
                    subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 1);
                    tmp = "";
                    break;

                case 'D':
                    subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 2);
                    tmp = "";
                    break;

                case 'T':
                    subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 3);
                    tmp = "";
                    break;

                case '*':
                    subScore[cnt - 1] *= 2;
                    if (cnt > 1)
                        subScore[cnt - 2] *= 2;
                    break;

                case '#':
                    subScore[cnt - 1] *= -1;
                    break;

                default:
                    tmp += now;
            }
        }

        for (int i : subScore)
            answer += i;

        return answer;
    }

    public static void main(String[] args) {
        String dartResult = "1S2D*3T";
//        String dartResult = "1D2S#10S";
//        String dartResult = "1D2S0T";
//        String dartResult = "1S*2T*3S";
//        String dartResult = "1D#2S*3S";
//        String dartResult = "1T2D3D#";
//        String dartResult = "1D2S3T*";

        solution(dartResult);
    }
}

카테고리:

업데이트:

댓글남기기