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

 

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

 

programmers.co.kr

ㄴ 문제가 길어 링크로 대체

문제 풀이 (JAVA)

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int [] score = new int[3]; // 스코어를 기록할 배열 선언
        int [] num = new int [3]; // 숫자를 가져올 배열 선언
        int j=0;
        int k=0;
        for(int i=0; i<dartResult.length(); i++){
            char ch = dartResult.charAt(i); // i번째 문자를 가져온다.
            
            if(Character.isDigit(ch)){ // 문자가 0~9사이 숫자라면 true
                if(ch=='1' && dartResult.charAt(i+1)=='0'){ // 10인 숫자를 구하는 논리식
                    num[j++]=10;
                    i++;
                }else{ // 10이 아니라면 숫자로 변환하여 숫자배열에 저장.
                    num[j++] = Character.getNumericValue(ch);
                }
            }else{ // 문자가 숫자가 아니라면 (S,D,T ,*,#)
                switch (ch){
                    case 'S' :
                        score[k++]=(int)Math.pow(num[j-1],1); // num[j-1]은 위에서 숫자를 저장후 j를 증가시키기 때문.
                        break;
                    case 'D' :
                        score[k++]=(int)Math.pow(num[j-1],2);
                        break;
                    case 'T' :
                        score[k++]=(int)Math.pow(num[j-1],3);
                        break;
                    case '*' :
                        if(j==1){ // 첫번째 기록 숫자일경우
                            score[k-1] *=2; // 현재 저장된 스코어만 x2배
                        }else if(j>1){ // 두번째 혹은 세번째 숫자일경우
                            score[k-1] *=2; // 이전 점수 x2배
                            score[k-2] *=2; // 현재 점수 x2배
                        }
                        break;
                    case '#' :
                        score[k-1] *= -1; // 현재 숫자만 -1배
                        break;
                }
            }
        }
        
        for(int i=0; i<score.length; i++){
            answer +=score[i];
            System.out.print(score[i]+",");
        }
        return answer;
    }
}

주요 핵심 포인트

1.  charAt을 사용해 문자열에 저장된 문자가 숫자인지 문자인지를 구별하였다. 

2. Character.isDisit 를 사용해 문자가 숫자인지를 판별하였다.

3. 숫자일 경우 getNumericValue를 사용해 문자를 숫자로 변환하여 저장하였다.

4. 숫자가 아닌경우 S D T 는 Math.pow를 사용해 제곱해주었다.

5. * 인 경우 이전 스코어와 현재 스코어에 *2배를 하였다.

6. #인 경우 현재 스코어에만 -1배를 곱하였다.

 

리뷰

: 카카오 코딩테스트 문제는 아직 제한된 시간내에 풀기에 부족하다는 생각이 들었다.

이 문제를 손쉽게 풀기 위하여 좀 더 많은 노력을 기울여야겠다는 생각을 하였다.

코딩 테스트를 준비하는 모든 분들이 성공하였으면 좋겠다.

 

'프로그래머스(JAVA)' 카테고리의 다른 글

[1차] 비밀지도  (0) 2022.04.24
가운데 글자 가져오기  (0) 2022.04.24
같은 숫자는 싫어  (0) 2022.04.24
나누어 떨어지는 숫자 배열  (0) 2022.04.24
두 정수 사이의 합  (0) 2022.04.24

+ Recent posts