[1차] 다트 게임

문제


문제풀이

해당 문제의 경우 문제를 얼마나 이해했는가에 따라 쉽게 풀 수 있는 문제라고 생각한다.

 

문자 S, D, T 의경우 n^1, n^2, n^3 을 의미하고,

문자 *은 앞에 두 숫자에 x2, 앞에 숫자가 하나인 경우 한개만 x2,

문자 #은 앞의 숫자에 x(-1) 을 해주면 되는 문제이다. 

 

숫자가 두자리 까지 나오는 케이스가 있기 때문에 각 문자열을 돌면서 숫자 -> 숫자 인경우 두 개를 더해서 list에 담아주는 방식으로 진행 하였다. 숫자 -> 문자면 한 개여도 바로 입력되게도 지정함. 

 

그 외 나머지 연산은 케이스에 따라 진행을 할 수 있도록 설계를 해주면 된다. 


 나의 답안

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

    ArrayList<Integer> list = new ArrayList<>();
    int count = 0;
    String num = "";
    while (count < dartResult.length()) {
        char c = dartResult.charAt(count);

        if (c >= '0' && c <= '9') {
            num += String.valueOf(c);
            count++;
            continue;
        } else if (c == '#') {
            list.set(list.size() -1, list.get(list.size() -1) * -1);
        } else if (c == '*') {
            if (list.size() == 1) {
                list.set(0, list.get(0) * 2);
            } else {
                list.set(list.size() -1, list.get(list.size() -1) * 2);
                list.set(list.size() -2, list.get(list.size() -2) * 2);
            }
        }

        if (!"".equals(num)) {
            list.add(Integer.parseInt(num));
            num = "";
        }

        switch (c) {
            case 'D':
                list.set(list.size() -1, (int) Math.pow(list.get(list.size() -1), 2));
                break;
            case 'T':
                list.set(list.size() -1, (int) Math.pow(list.get(list.size() -1), 3));
                break;
        }

        count++;
    }
    System.out.println(list);
    for (int i : list) answer += i;
    return answer;
}

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

기사단원의 무기  (0) 2023.03.22
로또의 최고 순위와 최저 순위  (0) 2023.03.22
명예의 전당 (1)  (0) 2023.03.22
과일 장수  (0) 2023.03.22
실패율  (0) 2023.03.21