| 문제 | 레벨 | 정답률 |
|---|---|---|
| 다트 게임 | Lv.1 | 59% |

문제를 풀다가 형변환, 문자열 파싱 방법 등이 꼬여서 문법적 오류가 발생하였고, 이를 해결하지 못해 풀이에 실패하였다.
class Solution {
public int solution(String dartResult) {
int[] scores = new int[3];
int index = -1;
for (int i = 0; i < dartResult.length(); i++) {
char dart = dartResult.charAt(i);
if (Character.isDigit(dart)) {
index++;
if (dart == '1' && dartResult.charAt(i+1) == '0') {
scores[index] = 10;
i++; // Skip one more character as '10' is considered as one dart
} else {
scores[index] = Character.getNumericValue(dart);
}
} else if (dart == 'S') {
scores[index] = (int) Math.pow(scores[index], 1);
} else if (dart == 'D') {
scores[index] = (int) Math.pow(scores[index], 2);
} else if (dart == 'T') {
scores[index] = (int) Math.pow(scores[index], 3);
} else if (dart == '*') {
scores[index] *= 2;
if (index > 0) {
scores[index-1] *= 2;
}
} else if (dart == '#') {
scores[index] *= -1;
}
}
return scores[0] + scores[1] + scores[2];
}
}
우선 현재 문자가 숫자일 경우엔 다음과 같이 처리한다.
현재 문자가 숫자가 아니라면 다음과 같이 처리한다.
마지막으로 3가지 scores 값을 다 더해서 return 한다.
Character.isDigit(num))
Character.getNumericValue(num)
레벨 1의 문제인데, 체감상 레벨 2에 가까웠던 것 같다.
단순하게는 char 변수의 문자를 숫자인지 판별하는 방법도 모르고 있어서 이런 단순한 문법을 모른 상태로 풀자니 어려웠다.
그리고 전체적인 로직을 위의 코드처럼 간단하게 구현하는 것도 생각보다는 어려웠던 문제같다.
그렇지만 문제를 봤을때 전혀 풀지 못할 문제는 아니어서, 다음부터는 이런 문자열 문제들도 처리할 수 있도록 더 열심히 해야겠다.