https://school.programmers.co.kr/learn/courses/30/lessons/17682
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
class Solution {
public int solution(String dartResult) {
int[] points = new int[3];
int idx = -1;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < dartResult.length(); i++) {
String s = Character.toString(dartResult.charAt(i));
if (isNumeric(s)) {
sb.append(s);
continue;
}
if (sb.toString().length() > 0) {
idx++;
points[idx] = Integer.parseInt(sb.toString());
sb = new StringBuilder();
}
int p = points[idx];
switch (s) {
case "S":
points[idx] = getPowNum(p, 1);
break;
case "D":
points[idx] = getPowNum(p, 2);
break;
case "T":
points[idx] = getPowNum(p, 3);
break;
case "*":
points = powerAllPoints(points, idx);
break;
case "#":
points[idx] = attachMinusPoints(points[idx]);
break;
}
}
return sum(points);
}
private boolean isNumeric(String s) {
try {
Integer.parseInt(s);
} catch (Exception e) {
return false;
}
return true;
}
private int getPowNum(int n, int cnt) {
int result = n;
for (int i = 0; i < cnt - 1; i++) {
result *= n;
}
return result;
}
private int[] powerAllPoints(int[] points, int idx) {
int[] result = points;
for (int i = idx; i > idx - 2 && i >= 0; i--) {
result[i] *= 2;
}
return result;
}
private int attachMinusPoints(int p) {
return p * -1;
}
private int sum(int[] points) {
int result = 0;
for (int p : points) {
result += p;
}
return result;
}
}
[Programmers] Lv.1 둘만의 암호 (Java) (1) | 2023.02.03 |
---|---|
[Programmers] Lv.1 완주하지 못한 선수 (Java) (0) | 2023.01.25 |
[Programmers] Lv.1 두 개 뽑아서 더하기 (Java) (0) | 2023.01.24 |
[Programmers] Lv.1 [1차] 비밀지도 (Java) (0) | 2023.01.24 |
[백준] 1919번 애너그램 만들기 (Go) (0) | 2023.01.11 |
댓글 영역