본문 바로가기

CS/알고리즘 풀이

[프로그래머스- 2018 카카오 공채] 다트 게임 (java)

[ 프로그래머스 2018 카카오 공채 ] 다트 게임 (자바)

 

문자열의 문자에 따라 여러 조건을 따라 만들면 되는 문제 

 

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임 | 프로그래머스

 

programmers.co.kr

 

https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/

 

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

‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인으로 치러졌습니다. 지원자들의 개발 능력을 잘 검증하기 위해 출제 위원들이 한 땀 한 땀 독창적이고 다양한 문제들을 만들어 냈고 문제에 이상은 없는지, 테스트케이스는 정확한지 풀어보고 또 풀어보며 […]

tech.kakao.com

 

핵심 

  1. 문자열 처리

    주어진 문자열을 탐색하며 끊기 때문에 10같은 두 자리 이상의 숫자에서 예외처리 해줘야한다.
    예제 부실하게 줬으면 틀린지도 모르고 제출했을 것같다. 

  2. 라이브러리 쓰면 조금 더 깔끔해진다

 

 

추가적으로 더 궁금한 점 있으면 댓글 달아주세요

 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class Solution {
  public int solution(String dartResult) {
        // 게임 3회 점수 저장 
         int[] scores = new int[3];
        int si = 0;
        
        
        for(int i = 0 ; i < dartResult.length() ; i++) {
            char c = dartResult.charAt(i);
            
            // 숫자 
            if(Character.isDigit(c)) {
                if(scores[si] != 0) {
                    scores[si] = 10;
                }else {
                    scores[si] = c - '0';
                }
                
                continue;
            }
            
            // S, D, T 
            if(c == 'D') {
                scores[si] = scores[si] * scores[si];
            }else if(c == 'T') {
                scores[si] = scores[si] * scores[si] * scores[si];
            }
            
            // 추가 옵션 처리 
            if(i+1 < dartResult.length()) {
                char nextC = dartResult.charAt(i+1);
                
                if(nextC == '#') {
                    scores[si] = - scores[si];
                    i++;
                }else if(nextC == '*') {
                    scores[si] *= 2;
                    
                    if(si-1 >= 0) {
                        scores[si-1*= 2;
                    }
                    i++;
                }
                
            }
            
            si++;
        }
        
        int ans = 0;
        for(int i = 0 ; i < scores.length ; i++) {
            ans += scores[i];
        }
        
        return ans;
    }
}
 
cs