문제 설명
입출력 예시
요약
획득 가능 점수는 0~10점
S = single, D = double, T = triple
* = 해당 턴 및 앞 턴의 점수 x2 (첫 번째 턴이라면 해당 점수만 적용)
# = 해당 턴 점수 x(-1)
풀이
문제 해석
숫자|알파벳|특수기호 조합의 각 턴의 점수를 계산한다.
접근 방식
1. 점수 리스트 생성
→ 알파벳 전의 1자리 혹은 2자리가 숫자면 intList.add()
2. 알파벳 리스트 생성
→ charAt(i).isAlphabetic()이면 strList.add()
3. 특수기호 리스트 생성
→ 알파벳 뒤의 1자리가 특수기호(*, #)면 symbolList.add()
코드리뷰
import java.util.*;
class Solution {
public int solution(String dartResult) {
List<Integer> intList = new ArrayList<>();
List<String> strList = new ArrayList<>();
List<String> symbolList = new ArrayList<>();
// 1. 점수, 보너스, 옵션 List 만들기
for(int i = 0; i < dartResult.length(); i++) {
if(Character.isAlphabetic(dartResult.charAt(i))) {
strList.add(String.valueOf(dartResult.charAt(i))); // 보너스 리스트
if(i < dartResult.length()-1 && (dartResult.charAt(i+1) == '#' || dartResult.charAt(i+1) == '*')) {
symbolList.add(String.valueOf(dartResult.charAt(i+1))); // 옵션 리스트
} else {
symbolList.add(" "); // 옵션이 아무것도 없으면 공백
}
if(i >= 2 && Character.isDigit(dartResult.charAt(i-2))) {
intList.add(Integer.valueOf(dartResult.substring(i-2, i))); // 점수 리스트(10점)
} else {
intList.add(Integer.valueOf(dartResult.substring(i-1, i))); // 점수 리스트(0-9점)
}
}
}
// 2. 보너스를 반영한 점수 리스트
for(int i = 0; i < intList.size(); i++) {
if(strList.get(i).equals("D")) { // socre *= score
int num = intList.get(i) * intList.get(i);
intList.set(i, num);
} else if(strList.get(i).equals("T")) { // socre *= score * score
int num = intList.get(i) * intList.get(i) * intList.get(i);
intList.set(i, num);
}
}
// 3. 옵션을 반영한 점수 리스트
for(int i = 0; i < intList.size(); i++) {
if(i == 0 && symbolList.get(i).equals("*")) { // 첫 번째 옵션이 *일 경우
intList.set(i, intList.get(i) * 2); // 현재 점수 x2
} else {
if(symbolList.get(i).equals("*")) {
intList.set(i-1, intList.get(i-1) * 2); // 이전 점수와 현재 점수 x2
intList.set(i, intList.get(i) * 2);
} else if(symbolList.get(i).equals("#")) {
intList.set(i, intList.get(i) * -1); // 현재 점수 x(-1)
}
}
}
// 정답 제출
int answer = 0;
for(int i = 0; i < intList.size(); i++) {
answer += intList.get(i);
}
return answer;
}
}
'알고리즘 > PROGRAMMERS' 카테고리의 다른 글
타겟 넘버(Lv.2) (0) | 2024.03.22 |
---|---|
실패율(Lv.1) (0) | 2024.03.22 |
체육복(Lv.1) (0) | 2024.03.21 |
완주하지 못한 선수(Lv.1) (0) | 2024.03.21 |
소수 찾기(Lv.2) (0) | 2024.03.21 |