본문 바로가기
  • Jetpack 알아보기
프로그래머스 - JAVA/Level 1

[JAVA] 프로그래머스 Lv.1 : 다트 게임

by 새우버거♬ 2021. 6. 3.

🔥 2018 KAKAO BLIND RECRUITMENT

1. 다트 게임은 총 3번의 기회로 구성된다.
2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
3. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다.
4. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
5. 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)
6. 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
7. Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
8. 스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.

 

예제:

 

예제 dartResult answer 설명
1 1S2D*3T 37 1¹ * 2 + 2² * 2 + 3³
2 1D2S#10S 9 1² + 2¹* (-1) + 10¹
3 1D2S0T
3 1² + 2¹ + 0³
4 1S*2T*3S 23 1¹ * 2 * 2 + 2³ * 2 + 3¹
5 1D#2S*3S 5 1² * (-1) * 2 + 2¹ * 2 + 3¹
6 1T2D3D# -4 1³ + 2² + 3² * (-1)
7 1D2S3T* 59 1² + 2¹ * 2 + 3³ * 2

Solution #1

class Solution {
    public int solution(String dartResult) {
        int[] result = new int[dartResult.length()];
        char[] array = dartResult.toCharArray();

        int index = 0, lastNum = 0;

        for (char c : array) {
            switch (c) {
                case 'S', 'D', 'T' -> {
                    Dart dart = new Dart(lastNum, c);
                    result[index] = dart.getPoint();
                    index++;
                    lastNum = 0;
                }
                case '*' -> {
                    if (index - 2 >= 0) result[index - 2] *= 2;
                    result[index - 1] *= 2;
                }
                case '#' -> result[index - 1] *= -1;
                default -> lastNum = lastNum == 0 ? c - '0' : 10;
            }
        }

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

        return answer;
    }

    private class Dart {
        int value;
        char s;
        int point;

        Dart(int value, char s) {
            this.value = value;
            this.s = s;

            switch (s) {
                case 'S' -> this.point = value;
                case 'D' -> this.point = value * value;
                case 'T' -> this.point = value * value * value;
            }
        }

        public int getPoint() {
            return point;
        }
    }
}

 

Result #1


 

More Algorithm!

 

👇👇

 

github.com/ggujangi/ggu.programmers

 

ggujangi/ggu.programmers

프로그래머스 알고리즘, JAVA. Contribute to ggujangi/ggu.programmers development by creating an account on GitHub.

github.com

 

 

 

출처 : 프로그래머스