반응형
https://programmers.co.kr/learn/courses/30/lessons/17682
[ 문제풀이 ]
문자열을 탐색하면서 주어진 조건대로 구현해주면 되는 문제이다. 주어진 문자열에서 3가지 영역을 잘 추출할 수 있다면 쉽게 해결할 수 있다.
class Solution {
public int solution(String dartResult) {
int answer = 0, beforeScore = 0;
for (int i = 0; i < dartResult.length(); ) {
int j, value = 0;
for (j = i+1; j < dartResult.length(); ++j) {
//현재 문자가 정수가 아니라면
if (!Character.isDigit(dartResult.charAt(j))) {
//(i~j-1)까지의 문자열을 정수로 변환
value = Integer.parseInt(dartResult.substring(i, j));
//다음 문자가 Double, Triple인 경우 처리
if (dartResult.charAt(j) == 'D') {
value = getScore(2, value);
} else if (dartResult.charAt(j) == 'T') {
value = getScore(3, value);
}
break;
}
}
//다음 문자가 범위를 벗어나면
if (++j >= dartResult.length()) {
answer += value;
break;
}
//다음 문자가 '*' 또는 '#'인 경우
if (!Character.isDigit(dartResult.charAt(j))) {
if (dartResult.charAt(j) == '*') {
value *= 2;
answer += beforeScore + value;
} else if (dartResult.charAt(j) == '#') {
value *= -1;
answer += value;
}
++j;
} else {
answer += value;
}
i = j;
beforeScore = value; //이전 점수를 변경
}
return answer;
}
public int getScore(int n, int score) {
if (n == 1) return score;
return score * getScore(n - 1, score);
}
}
반응형
'Problem Solving > 카카오 블라인드 기출' 카테고리의 다른 글
2018 - [3차] 압축 (0) | 2021.08.07 |
---|---|
2018 - [3차] 방금그곡 (0) | 2021.08.07 |
2018 - [1차] 비밀지도 (0) | 2021.08.07 |
2018 - [1차] 캐시 (0) | 2021.08.07 |
2018 - [1차] 프렌즈4블록 (0) | 2021.08.07 |
댓글