마이의 개발 블로그

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

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

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

개발자마이 2023. 1. 24. 16:17
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

노가다 이외의 방법으로 풀어보려고 몇 번 두고 계속 봤던 문제인데, 결국 문제를 읽으며 예외처리를 하나씩 추가해나가는 방식으로 문제를 풀 수밖에 없었다.

 

- 다트 던지기가 3라운드로 제한되어 있으니 숫자별로 자르는 동작 없이 한 번에 문자 한 개씩 읽어가며 문제를 해결하고자 함. 이를 위해 별도의 int[] arr, idx를 선언하여 사용

- 숫자를 읽어올 때마다 직전 점수를 int[] arr에 저장함

- 현재 문자가 숫자인데 다음 문자가 '0'일 경우 숫자 10으로 판단, 10으로 저장 후 인덱스 두 번 증가

- 스타상(*)의 경우 직전 점수도 2배가 되어야 하므로 int[] arr에 저장된 직전 배열을 2배로 곱해줌

- 마지막 index인 경우 점수를 int[] arr에 저장

 

Note

- 다른 사람들의 풀이를 보니 나보다 더 난잡하게 푼 경우도 많아서 그나마 위안을 얻었다. 

class Solution {
    public int solution(String result) {
        
        int answer = 0;      
        
        int[] arr = new int[3];
        int idx = 0;
        
        int number = 0;
        
        for(int i = 0; i < result.length(); i++){
            
            char c = result.charAt(i);
            
            if(c >= '0' && c <= '9'){
                if(number != 0){
                    
                    arr[idx] = number;
                    idx++;
                    number = 0;
                }
                
                if(result.charAt(i + 1) == '0'){
                    number = 10;
                    i++;
                    continue;
                }else{
                    number = Character.getNumericValue(c);
                }
                continue;
            }
            
            if(c == 'D'){
                number = number * number;
            }else if(c == 'T'){
                number = number * number * number;
            }
            
            if(c == '*'){
                if(idx > 0){
                    arr[idx - 1] *= 2;
                }
                number *= 2;
            }else if(c == '#'){
                number = -number;
            }
            
            if(i == result.length() - 1){
                arr[idx] = number;
            }
            
        }

        for(int n : arr){
            answer += n;
        }
        
        return answer;
    }
}
반응형
Comments