알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 다트게임

류창 2021. 8. 17. 21:42
반응형

문제 분석

문제를 요약하자면 , 스코어+보너스+옵션의 조합으로 3번의 기회를 점수 토탈로 반환하면 되는문제다.

 

이 옵션이 있을수도있고 없을수도 없기에, 생각을많이해야한다. 

 

옵션이 무조건있다면 3자리씩 끊어 생각할수 있엇겟지만, 불가능하다.

 

그렇다면 스코어를 따로 빼놓고 보너스와 옵션을 계산하는식으로 풀어야한다.

 

문제 풀이

 

스코어를 빼놓기위해, replaceAll로 옵션기호를 모두 빈칸으로만든다. 그 후 보너스를기준으로 분해후 score로저장한다.

 

dartResult를 1글자씩 순회하여 확인하기위해 split("")으로 분해후 dart_sp로 저장한다.

 

3번의 결과를 저장하기위해 크기가 3인 total배열을 선언한다.

 

dart_sp를 순회하면서, 보너스와 옵션을 추가하여 합계를 구한다.

 

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
import java.util.*;
class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        String[] score =dartResult.replaceAll("[*#]","").split("[SDT]");        
        int cnt=0;
        String[] dart_sp=dartResult.split("");
        double[] total =new double[3];
        for(int i=0;i<dart_sp.length;i++){
            if(dart_sp[i].equals("S")){
                total[cnt]=Integer.parseInt(score[cnt]);
                cnt++;
            }
            else if(dart_sp[i].equals("D")){
                total[cnt]=Math.pow(Integer.parseInt(score[cnt]),2);
                cnt++;
            }
            else if(dart_sp[i].equals("T")){
                total[cnt]=Math.pow(Integer.parseInt(score[cnt]),3);
                cnt++;
            }
            else if(dart_sp[i].equals("*")){
                if(cnt==1){
                    total[cnt-1]*=2;
                }
                else{
                    total[cnt-2]*=2;
                    total[cnt-1]*=2;
                }
            }
            else if(dart_sp[i].equals("#")){
                    total[cnt-1]*=-1;
                }
            }
        
        int totals =(int)(total[0]+total[1]+total[2]);
        
        return answer=totals;
    }
}
cs

 

 

반응형