[프로그래머스(Programmers)] 2018 KAKAO BLIND RECRUITMENT:: 다트 게임 (java)

1
post-thumbnail

안녕하세요. 오늘은 프로그래머스의 다트 게임 문제를 풀어보겠습니다. 이 문제는 2018년도 KAKAO BLIND RECRUITMENT에서 출제된 문제입니다.


문제 링크

https://programmers.co.kr/learn/courses/30/lessons/17682

문제 풀이

재미있게 풀었던 문제였습니다. for문을 돌면서 dartResult에 저장된 값에 따라 결과를 나타냈습니다.

전체 코드

class Solution {
    public int solution(String dartResult) {
        int answer = 0;		//최종 결과값
        int nowNum = 0;		//dartResult의 숫자 저장하는 변수
        int beforeTmp = 0;	//이전 결과값 저장(스타상 중첩 위해)
        int tmp = 0;		//현재 결과값 저장
        boolean isNum = false;  //숫자가 두 자리 수 이상일 경우를 위한 변수
        
        for(int i=0; i<dartResult.length(); i++) {
            char dart = dartResult.charAt(i);
            
            switch(dart) {
                case 'S':	//single
                    tmp = nowNum;
                    answer += tmp;
                    isNum = false;
                    break;
                    
                case 'D':	//double
                    tmp = nowNum*nowNum;
                    answer += tmp;
                    isNum = false;
                    break;
                    
                case 'T':	//triple
                    tmp = nowNum*nowNum*nowNum;
                    answer += tmp;
                    isNum = false;
                    break;
                    
                case '#':	//아차상
                    tmp = tmp*(-1);
                    //이미 tmp값을 더했기 때문에 tmp값의 2배를 빼준다
                    answer += tmp*2;	
                    isNum = false;
                    break;
                    
                case '*':	//스타상
              	    //첫 번째 기회에서 스타상이 나왔을 경우 if문 탄다
                    if(i < 3) answer += tmp;
                    else      answer += beforeTmp + tmp;
                    //tmp에 두 배를 해줘서 중첩될 수 있도록 한다
                    tmp = tmp*2;
                    isNum = false;
                    break;
                    
                default:	//숫자
               	    //숫자 자리수가 두자리 이상일 경우 if문 탄다
                    if(isNum) nowNum = nowNum*10+(dart-'0');
                    else {
                        nowNum = dart-'0';
                        //이전 tmp값을 저장-> 스타상 중첩 시 사용
                        beforeTmp = tmp;
                    }
                    isNum = true;
                    break;
            }
        }
        return answer;
    }
}

느낀점

스타상을 중첩시키는 부분이 조금 어려웠고, 처음에 dartResult의 숫자가 0에서 9까지만 가능한 줄 알고 풀었다가 실패했습니다. 주어진 상황을 정확하게 이해하는 게 중요하다고 다시 한 번 느꼈습니다.

0개의 댓글