티스토리 뷰

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

 

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

 

programmers.co.kr

 

[문제 풀이]

 

1. 점수는 0 ~ 10 사이이므로 한 글자씩 처리할 경우 10을 처리할 수 없다.

  1-1. 각 숫자를 정답 배열에 저장한다.

  1-2. 숫자 다음에도 숫자가 온다면 10이므로 1에 10을 곱해준다.

2. 알파벳 S, D, T라면 S는 1 제곱, D는 2 제곱, T는 3 제곱을 해준다.

3. 특수문자 *, #이 온다면 *는 2배, #는 -1배를 해준다.

  3-1. *는 해당 점수와 이전 점수를 2배로 만들어준다.

  3-2. *는 첫번째에 나올 수 있다.

  3-3. 즉, 이전 점수가 존재한다면 이전 점수와 해당 점수를 2배를 해주고 이전 점수가 없다면 해당 점수만 2배를 해준다.

4. 모든 값을 더해서 반환한다.

 

[소스 코드]

 

public class DartGame {
    public static void main(String[] args) {
        String dartResult = "10D2S#10S";

        System.out.println(solution(dartResult));
    }

    private static int solution(String dartResult) {
        int[] result = new int[3];
        int index = -1;
        char[] c = dartResult.toCharArray();

        for (int i = 0; i < c.length; i++) {
            char temp = c[i];

            if (Character.isDigit(temp)) {
                if (i > 0 && Character.isDigit(c[i - 1])) {
                    result[index] *= 10;
                    continue;
                }
                result[++index] = temp - '0';
            } else if (Character.isAlphabetic(temp)) {
                calculatePowerWithText(result, index, temp);
            } else {
                calculateSpecialSymbol(result, index, temp);
            }
        }

        int sum = 0;

        for (int i : result) {
            sum += i;
        }

        return sum;
    }

    private static void calculatePowerWithText(int[] result, int index, char temp) {
        switch (temp) {
            case 'S':
                break;
            case 'D':
                result[index] = (int) Math.pow(result[index], 2);
                break;
            case 'T':
                result[index] = (int) Math.pow(result[index], 3);
                break;
        }
    }

    private static void calculateSpecialSymbol(int[] result, int index, char temp) {
        switch (temp) {
            case '*':
                if (index != 0) {
                    result[index - 1] *= 2;
                }
                result[index] *= 2;
                break;
            case '#':
                result[index] *= -1;
                break;
        }
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함