본문 바로가기
Algorithm/프로그래머스

[프로그래머스][2018 KAKAO BLIND RECRUITMENT] [1차] 다트 게임 (level 1)

by HBGB 2019. 12. 10.

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

 

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

 

programmers.co.kr

 

 

 

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.util.Arrays;
 
class Solution {
    public int solution(String dartResult) {
 
        int[] arrPoint = new int[3];
        int[] arrNumPlace = new int[3];
        int[] arrPointSum = new int[3];
        int iIndex = 0;
 
        // 숫자 위치와 숫자 구하기
        for (int i = 0; i < dartResult.length(); i++) {
 
            char nowChar = dartResult.charAt(i);
 
            if (isNumber(nowChar) && iIndex < 3) {
 
                arrNumPlace[iIndex] = i;
                int temp = nowChar - '0';
 
                if (isNumber(dartResult.charAt(i + 1))) {
                    temp = temp * 10 + (dartResult.charAt(i + 1- '0');
                    i++;
                }
                arrPoint[iIndex++= temp;
            }
        }
        
        // 보너스가 계산된 수 구하기
        Arrays.fill(arrPointSum, 1);
        
        for (int i = 0; i < dartResult.length(); i++) {
 
            char nowChar = dartResult.charAt(i);
            if(isNumber(nowChar)) {
                continue;
            }
            
            int iSection = getSection(arrNumPlace, i);
            int iPoint = arrPoint[iSection];
 
            if (nowChar == 'S') {
                arrPointSum[iSection] *= iPoint;
            }
            if (nowChar == 'D') {
                arrPointSum[iSection] *= iPoint * iPoint;
            }
            if (nowChar == 'T') {
                arrPointSum[iSection] *= iPoint * iPoint * iPoint;
            }
            if (nowChar == '#') {
                arrPointSum[iSection] *= -1;
            }
            if (nowChar == '*') {
                int iCount = 0;
                while(iSection - iCount >= 0 && iCount < 2) {
                    arrPointSum[iSection - iCount] *= 2;
                    iCount++;
                }
            }
        }
 
        // 합산
        int answer = 0;
        for (int i = 0; i < arrPoint.length; i++) {
 
            answer += arrPointSum[i];
        }
        return answer;
    }
 
    public boolean isNumber(char chaNum) {
 
        if (chaNum >= '0' && chaNum <= '9') {
            return true;
        }
        return false;
    }
 
    public int getSection(int[] arrNum, int index) {
 
        if (index >= arrNum[2]) {
            return 2;
        }
        if (index >= arrNum[1]) {
            return 1;
        }
        return 0;
    }
}
Colored by Color Scripter

 

 

프로그래머스에서 다른사람들의 풀이를 보았지만

내 풀이가 더 가독성이 좋은 것 같다 엣헴

속도도 나쁘지 않은 것 같다. 

 

 

"이 방법은 너무 구릴 것 같다"고 지레 겁먹고 머리만 싸매지말자

구린 것 같아도 일단 시도해보자

댓글