반응형
문제 분석
문제를 요약하자면 , 스코어+보너스+옵션의 조합으로 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 |
반응형
'알고리즘 > 프로그래머스 Level1' 카테고리의 다른 글
[프로그래머스,자바] Level1: 나누어 떨어지는 숫자 배열 (0) | 2021.08.18 |
---|---|
[프로그래머스,자바] Level1: 같은 숫자는 싫어 (0) | 2021.08.17 |
[프로그래머스,자바] Level1: 비밀지도 (0) | 2021.08.15 |
[프로그래머스,자바] Level1: 가운데 글자 가져오기 (0) | 2021.08.15 |
[프로그래머스,자바] Level1: 어린동물 찾기 (0) | 2021.08.14 |