빙응의 공부 블로그

[Programmers]Lv.1 다트게임 본문

Argorithm

[Programmers]Lv.1 다트게임

빙응이 2024. 1. 3. 20:55


📝풀이

나는 이것을 푸는 것에 있어 자바의 replaceAll을 사용하였다.

사용한 이유는 문제 기본 String의 길이는 6으로 *, #을 제외하고 숫자만 계산한 다음 *,#에 대해 계산하였다.

또한 하다보니 10도 String 길이에 영향을 줘서 W로 대체하였다. 

 

import java.util.Arrays;

class Solution {
    public int solution(String dartResult) {
        String temp = dartResult.replaceAll("\\*", "").replaceAll("#", "").replaceAll("10", "W");
        int[] N = new int[temp.length() / 2];
        
        for (int i = 0; i < N.length; i++) { //각 숫자의 제곱 계산
            char SDT = temp.charAt(i * 2 + 1);

            if (temp.charAt(i * 2) == 'W') {//만약 W라면 10 
                N[i] = 10;
            } else {
                N[i] = Character.getNumericValue(temp.charAt(i * 2));
            }
            
            switch (SDT) {
                case 'S':
                    break;
                case 'D':
                    N[i] = (int) Math.pow(N[i], 2);
                    break;
                case 'T':
                    N[i] = (int) Math.pow(N[i], 3);
                    break;
            }
        }
        
        for (int i = 0; i < dartResult.length(); i++) { //*,# 처리 
            char c = dartResult.charAt(i);
            int n = c == '*' ? 2 : c == '#' ? -1 : 1;
            
            if (i == 2) {
                N[0] *= n;
            } else if (i == dartResult.length() - 1) {
                N[2] *= n;
                if (c == '*') {
                    N[1] *= n;
                }
            } else {
                N[1] *= n;
                if (c == '*') {
                    N[0] *= n;
                }
            }
        }
        
        return Arrays.stream(N).sum();
    }
}

'Argorithm' 카테고리의 다른 글

[Programmers]Lv.1 이상한 문자 만들기  (0) 2024.01.08
[Programmers]Lv.1 비밀지도  (0) 2024.01.03
[Programmers]Lv.1 완주하지 못한 선수  (1) 2024.01.02
[Programmers]Lv.1 K번째 수  (0) 2024.01.02
[Programmers]Lv.1 모의고사  (1) 2024.01.02