다트 게임

Seongjin Jo·2023년 2월 21일
0

프로그래머스 LV1

목록 보기
19/31

문제

풀이

import java.util.*;
class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int n=0; int index=0;
        String numStr="";
        int[] dart = new int[3];
        
        
        for(int i=0; i<dartResult.length(); i++){
            char ch = dartResult.charAt(i);
            
            //1.숫자인경우
            if(Character.isDigit(ch)==true){
                numStr+=String.valueOf(ch);
            }
            
            //2.보너스
            else if(ch == 'S' || ch=='D' || ch=='T'){
                n=Integer.parseInt(numStr);
                if(ch=='S') dart[index++] = (int) Math.pow(n,1);
                else if(ch=='D') dart[index++] = (int) Math.pow(n,2);
                else dart[index++] = (int) Math.pow(n,3);
                numStr="";
            }
            
            //3.옵션
            else{
                if(ch=='*'){
                    dart[index-1]*=2;
                    if(index-2>=0) dart[index-2]*=2;
                }
                else if(ch=='#') {
                    dart[index-1]*=(-1);
                }
            }
        }
        answer=dart[0]+dart[1]+dart[2];
        return answer;
    }
}
  1. 다트 게임 크기는 3번으로 고정된다. int[] dart 크기 3으로 생성
  2. Character.isDigit()를 이용해서 문자가 숫자인지를 판별한다.
  3. 임의의 문자 numStr에 숫자인 문자 ch를 String.valueOf()로 담는다.
  4. 이제 보너스. 구간을 나눠준다. S , D , T 일 경우 마다 numStr에 있는 문자를 숫자로 만들고 n이라고 해주고, 그 n을 경우에 따라 Math.pow()를 이용해서 제곱해준 다음, dart[index++]에 저장해준다. 바로 다음게임을 겨냥 하기위해서 index++을 해준다. 그 후 numStr 초기화.
  5. 마지막 옵션이다. '*'일 경우 해당문자를 제곱해주고 해당하는 문자 전 문자도 있으면 제곱해준다. '#'일 경우에는 해당문자를 -1을 곱해줘서 음수로 만든다.
  6. dart[]를 다 더해서 answer에 담으면 끝.

0개의 댓글