S, D(점수 2제곱),T(점수 3제곱)
*(앞점수와 해당 점수 2배), #(해당 점수를 음수로)
3번의 다트 점수가 주어질때 S,D,T, * , # 를 계산한 총점을 반환
public int solution(String dartResult) {
int answer = 0;
char[] arr = dartResult.toCharArray();
ArrayList<Integer> scoreList = new ArrayList<>();
for (int i=-0; i<arr.length;i++) {
if(Character.isDigit(arr[i])&&!Character.isDigit(arr[i+1])) {
scoreList.add(Integer.parseInt(arr[i]+""));
}else if(Character.isDigit(arr[i])) {
scoreList.add(Integer.parseInt(arr[i]+""+arr[i+1]));
i++;
}else if(arr[i]=='D') {
int score =scoreList.get(scoreList.size()-1);
score = score*score;
scoreList.remove(scoreList.size()-1);
scoreList.add(score);
}else if(arr[i]=='T') {
int score = scoreList.get(scoreList.size()-1);
score = score*score*score;
scoreList.remove(scoreList.size()-1);
scoreList.add(score);
}else if(arr[i]=='*') {
int score = scoreList.get(scoreList.size()-1);
score = 2*score;
scoreList.remove(scoreList.size()-1);
scoreList.add(score);
if(scoreList.size()>=2) {
int pscore = scoreList.get(scoreList.size()-2);
pscore = 2*pscore;
scoreList.remove(scoreList.size()-2);
scoreList.add(scoreList.size()-1, pscore);
}
}else if(arr[i]=='#') {
int score = scoreList.get(scoreList.size()-1);
score = -1*score;
scoreList.remove(scoreList.size()-1);
scoreList.add(score);
}
}
for (Integer integer : scoreList) {
answer+=integer;
}
return answer;
}
점수리스트를 만들어
int score = scoreList.get(scoreList.size()-1);
를 통해 해당 점수를 얻어 S,D,T, *, # 연산을 해준다.
만약 *의 경우 앞에 점수가 있다면
if(scoreList.size()>=2) {
int pscore = scoreList.get(scoreList.size()-2);
pscore = 2*pscore;
scoreList.remove(scoreList.size()-2);
scoreList.add(scoreList.size()-1, pscore);
}
이전 점수까지 계산해주고 본래 위치로 다시 삽입한다.
for (Integer integer : scoreList) {
answer+=integer;
}
이후 answer에 리스트를 순회하면서 점수를 각각 더해준다.
'Java > Coding Test' 카테고리의 다른 글
크레인 인형뽑기 게임 문제 풀이 (0) | 2023.10.04 |
---|---|
로또의 최고 순위와 최저 순위 문제 풀이 (0) | 2023.10.04 |
실패율 문제 풀이 (0) | 2023.10.01 |
문자열 나누기 문제 풀이 (1) | 2023.10.01 |
대충 만든 자판 문제 풀이 (0) | 2023.10.01 |