https://school.programmers.co.kr/learn/courses/30/lessons/17682
1. 내 풀이
이전 수를 int에 따로 저장해서 검사했다.
class Solution {
public int solution(String dartResult) {
int answer = 0;
int prevNum = 0;
for(int i = 0; i < dartResult.length() ; i++){
// 점수
char ch = dartResult.charAt(i++);
int num;
if(ch == '1' && dartResult.charAt(i) == '0'){ i++; num = 10; }
else num = ch - '0';
// 보너스
ch = dartResult.charAt(i);
if(ch == 'S');
else if(ch == 'D') num = (int)Math.pow(num, 2);
else if(ch == 'T') num = (int)Math.pow(num, 3);
// 옵션
if(i + 1 < dartResult.length()){
ch = dartResult.charAt(i+1);
if(ch == '*') {
num *= 2;
prevNum *= 2;
i++;
}
else if(ch == '#') {
num *= -1;
i++;
}
}
answer += prevNum;
prevNum = num;
}
answer += prevNum;
return answer;
}
}
2. 다른 분 풀이 - stack 사용
Character.isDigit(c)를 활용해 숫자인지를 알 수 있다.
stack을 사용해 편리하게 값을 넣었다 뺐다 하고있다.
import java.util.*;
class Solution {
public int solution(String dartResult) {
Stack<Integer> stack = new Stack<>();
int sum = 0;
for (int i = 0; i < dartResult.length(); ++i) {
char c = dartResult.charAt(i);
if (Character.isDigit(c)) {
sum = (c - '0');
if (sum == 1 && i < dartResult.length() - 1 && dartResult.charAt(i + 1) == '0') {
sum = 10;
i++;
}
stack.push(sum);
} else {
int prev = stack.pop();
if (c == 'D') {
prev *= prev;
} else if (c == 'T') {
prev = prev * prev * prev;
} else if (c == '*') {
if (!stack.isEmpty()) {
int val = stack.pop() * 2;
stack.push(val);
}
prev *= 2;
} else if (c == '#') {
prev *= (-1);
}
// System.out.println(prev);
stack.push(prev);
}
}
int totalScore = 0;
while (!stack.isEmpty()) {
totalScore += stack.pop();
}
return totalScore;
}
}
'코딩테스트 > Programmers' 카테고리의 다른 글
[프로그래머스] 둘만의 암호 (0) | 2025.03.13 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위 (1) | 2025.03.05 |
[프로그래머스] 옹알이(2) (0) | 2025.03.05 |
[프로그래머스] 실패율 (0) | 2025.03.05 |
[프로그래머스] 소수 찾기 (0) | 2025.03.05 |