1. 문제 풀이 아이디어
- 문자열에서 숫자만 걸러 배열로 만든 뒤, 들어오는 문자에 따라 연산을 수행하면 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public int solution(String dartResult) {
int[] arr = Arrays.stream(dartResult.split("[SDT*#]")).filter(s -> !s.isEmpty()).mapToInt(Integer::parseInt).toArray();
int index = -1;
for (char c : dartResult.toCharArray()) {
if (c == 'S') {
index++;
} else if (c == 'D') {
index++;
arr[index] *= arr[index];
} else if (c == 'T') {
index++;
arr[index] *= arr[index] * arr[index];
} else if (c == '*') {
arr[index] *= 2;
if (index > 0)
arr[index - 1] *= 2;
} else if (c == '#') {
arr[index] *= -1;
}
}
return Arrays.stream(arr).sum();
}
}
3. 정리
- 입력값에
split
메서드를 사용해 숫자를 분리한 후, 스트림을 사용하여 빈 문자열을 제거하고int
배열로 변환한다.
index
를-1
로 초기화한 후,for
문에서 각 문자에 따라 해당하는 연산을 수행한다.
- 모든 연산을 끝낸 뒤, 배열의 전체 합을 반환하여 문제를 해결한다.
Share article