Jam's story

[프로그래머스] 다트게임 본문

코딩테스트/프로그래머스

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

애플쩀 2022. 7. 7. 08:29
  • 변수 n은 숫자를 저장 , index는  인덱스를, nowInt는 
  • dartResult길이만큼 for 문을 돌려서 문자열 하나하나 마다 검사 
  • 해당 인덱스에 맞는 문자 1개를 c에 저장 
  •  c가 숫자일 경우와  아닐경우로 나눔 
  • c가 10일경우 ( 해당하는게 1인데, 뒤에꺼가 0이면 ) n=10저장 
  • 10이 아닐경우 숫자 형태의 char형을 int형으로 변환.
  • score 인덱스에 S,D,T ( 변수 index 는 score 배열을 위한 변수)해당 하는 값을 넣어줌 
  • score[0]= S 값 이런식 
  • * 스타상은 바로전에 얻은 점수를 2배, 바로전에 얻은 점수가 없다면, 첫번째, 있다면 index-2
  • #이라면  바로전 점수를 -1 처리 
  •  
class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int n = 0, index = 0, nowInt = 0;
        int[] score = new int[3]; // 각 단계별 획득 점수
 
        for (int i = 0; i < dartResult.length(); i++) {
            char c = dartResult.charAt(i);
 
            /* 점수- 숫자 일 경우 */
            if (Character.isDigit(c)) {
                n = 0;
                if (c == '1' && dartResult.charAt(i + 1) == '0') {
                    n = 10;
                    i++; // 인덱스 다음으로 증가
                } else {
                    n = Character.getNumericValue(c);
                }
                
                nowInt++;
                
            /* 보너스 or 옵션일 경우 */
            } else {
                switch (c) {
                case 'S':
                    score[index++] = (int) Math.pow(n, 1);    // 1제곱
                    break;
                    
                case 'D':
                    score[index++] = (int) Math.pow(n, 2);    // 2제곱
                    break;
                    
                case 'T':
                    score[index++] = (int) Math.pow(n, 3);    // 3제곱
                    break;
                    
                case '*':    // 스타상 :  바로 전에 얻은 점수를 각 2배
                    index = index - 2 < 0 ? 0 : index - 2;
                    while (index < nowInt) {
                        score[index++] *= 2;
                    }
                    n = 0;
                    break;
                    
                case '#':    // 아차상 :  해당 점수는 마이너스
                    score[index-1] *= -1;    
                    n = 0;
                    break;
                }
            }
        }
        
        for (int i : score) {
            answer += i;
        }
 
        return answer;
    }
}
Comments