본문 바로가기
알고리즘/문제 풀이 (출처: 프로그래머스)

[JAVA] 다트 게임_프로그래머스 level 1

by 이민우 2020. 9. 11.
728x90
반응형

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

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

입력 형식

점수|보너스|[옵션]으로 이루어진 문자열 3세트.
예) 1S2D*3T

  • 점수는 0에서 10 사이의 정수이다.
  • 보너스는 S, D, T 중 하나이다.
  • 옵선은 *이나 # 중 하나이며, 없을 수도 있다.

출력 형식

3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37

입출력 예제

예제dartResultanswer설명

1 1S2D*3T 37 11 * 2 + 22 * 2 + 33
2 1D2S#10S 9 12 + 21 * (-1) + 101
3 1D2S0T 3 12 + 21 + 03
4 1S*2T*3S 23 11 * 2 * 2 + 23 * 2 + 31
5 1D#2S*3S 5 12 * (-1) * 2 + 21 * 2 + 31
6 1T2D3D# -4 13 + 22 + 32 * (-1)
7 1D2S3T* 59 12 + 21 * 2 + 33 * 2

해설 보러가기

 

카카오 신입 공채 1차 코딩 테스트 문제 해설

‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인��

tech.kakao.com

 

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int[] num = new int[3];
        int cnt = 0;
        
        for(int i=0; i<dartResult.length(); i++) {
            if(dartResult.charAt(i)<='9' && dartResult.charAt(i) >= '0'){
                if(dartResult.charAt(i) == '1' && dartResult.charAt(i+1) == '0') {
                    num[cnt++] = 10;
                    i++;
                }
                else num[cnt++] = dartResult.charAt(i) - '0';
                if(cnt == 3) break;
            }
        }
        String[] arr = dartResult.split("[0-9]");
        
        for(int i=0; i<3; i++) System.out.println(num[i] + arr[i]);
        cnt = 0;
        int i=0;
        while(cnt != arr.length) {
            if(arr[cnt].equals("")) {
                cnt++;
                continue;
            }
            else {
                for(int j=0; j<arr[cnt].length(); j++) {
                    switch(arr[cnt].charAt(j)) {
                        case 'D' :
                            num[i] *= num[i];
                            break;
                        case 'T' :
                            num[i] *= num[i]*num[i];
                            break;
                        case '*' :
                            num[i] *= 2;
                            if(i!=0) num[i-1] *= 2;
                            break;
                        case '#' :
                            num[i] *= -1;
                            break;
                    }
                }
                i++;
                cnt++;
            }
        }
        
        for(i=0; i<3; i++) {
            answer += num[i];
        }
        
        return answer;
    }
}

*StringTokenizer은 정규식이 불가능함.

*split과 StringTokenizer의 차이점은 StringTokenizer은 공백인 문자열을 자동으로 삭제해줌.

*정규식 [^0-9] 에서 ^은 제외의 의미

728x90
반응형