[프로그래머스] Lv.1 [1차] 다트 게임 (Java)

subbni·2023년 1월 20일
0

프로그래머스

목록 보기
4/23

문제

나의 풀이

  • 점수, 보너스, 옵션 각각의 배열을 만들었다.
  • 점수가 두자리수가 넘어가는 경우는 '10'인 경우 하나밖에 없다.
    - 점수가 10인 경우에는 숫자 1이 먼저 나오고, 이어서 또 숫자 0이 나온다. -> 숫자인데 해당 인덱스에 이미 '1'이 저장되어 있는 경우는 점수가 10인 경우이다.
  • 보너스 문자는 항상 나오는 반면, 옵션은 나올수도 나오지 않을 수도 있으며 항상 옵션 문자가 보너스 문자 뒤에 나온다.
    - 보너스 문자가 나오면 idx를 증가시킨다. -> 옵션 문자가 나오면, idx-1의 배열에 저장한다.
class Solution {
    public int solution(String dartResult) {
        int[] score = new int[3];
        char[] bonus = new char[3];
        char[] option = new char[3];
        
        int idx=0;
        for(char c:dartResult.toCharArray()) {
            if(c-'0'>=0 && c-'0'<=10) {
                if(score[idx]==1) score[idx] = 10;
                else score[idx] = c-'0'; 
            } else if(c=='S' || c=='D' || c=='T') {
                bonus[idx] = c;
                idx++;
            } else {
                option[idx-1] = c;
            }
        }

        for(int i=0;i<bonus.length;i++) {
            if(bonus[i]=='D') score[i] = score[i]*score[i];
            else if(bonus[i]=='T') score[i]= score[i]*score[i]*score[i];
        }
        for(int i=0;i<option.length;i++) {
            if(option[i]=='*') {
                score[i] *= 2;
                if(i!=0) score[i-1] *= 2;
            }
            else if(option[i]=='#') {
                score[i] *= (-1);
            }
        }

        int answer = score[0] + score[1] + score[2];
        return answer;
    }
}

다른 풀이

stack을 사용한 사람도 있었고, 정규식을 사용한 사람도 있었다.
그치만 .. 내가 짜서 그런가 난 내 풀이가 가장 직관적이고 이해하기 쉬운 것 같다 ㅎ

후기

문제가 길어서 무서웠지만 막상 풀어보니 어렵지 않았던 문제
소요시간 : 22분

profile
개발콩나물

0개의 댓글