1차 다트게임(java)

최준근·2021년 12월 27일
0

java알고리즘

목록 보기
31/63

문제설명


생각하기

  1. 특수문자 , 문자, 숫자 순으로 입력 받기
  2. Math.pow 사용하기
  3. 4개의 int형 배열 만들기

내 풀이

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        
        String ans = "";
        int[] arr = new int[4];
        int cnt =0;
        for(int i=0; i<dartResult.length(); i++){
            
            if(dartResult.charAt(i) == '*'){
                arr[cnt-1] *=2;
                if(cnt>1) arr[cnt-2]*=2;
                
            }
            else if(dartResult.charAt(i) == '#'){
                arr[cnt-1] *= -1;
            }
            else if(dartResult.charAt(i) == 'S'){
                // Math의 반환 타입은 double이기에 int로의 형 변환이 필요.
                arr[cnt] = (int)Math.pow(arr[cnt],1);
                cnt++;
            }
            else if(dartResult.charAt(i) == 'D'){
                arr[cnt] = (int)Math.pow(arr[cnt],2);
                cnt++;
            }
            else if(dartResult.charAt(i) == 'T'){
                arr[cnt] = (int)Math.pow(arr[cnt],3); 
                cnt++;
            }
            else{
                // char를 덧셈하면 문자열로 변환된다.
                ans += dartResult.charAt(i); 
                // i+1이 0이라면 continue로 넘겨 10을 완성시키기
                if(dartResult.charAt(i+1) == '0') continue; 
                
                arr[cnt] = Integer.parseInt(ans);
                ans ="";
            }
        }
        
        for(int i=0; i<arr.length; i++){
            answer += arr[i];
        }
        return answer;
    }
}

조건이 많기 때문에 하나하나 살펴보면서 구현해야한다. 첫번째 시도엔 아예 실패했고, 두번째 시도에 방향을 잡았다. int[3]이 아닌 int[4]를 준 이유는 영어문자 'S,D,T'에서 cnt++을 하는데 그렇되면 마지막 문자를 지나고나서 int배열의값은 4된다. 3으로 초기화 한다면 인덱스오류가 난다.

profile
느려도 좋으니 꾸준하게

0개의 댓글