https://programmers.co.kr/learn/courses/30/lessons/17682
굉장히 단순하게 풀이한 문제로 리팩토링을 통해서 조금더 코드를 다듬을 수 있을거 같지만 일단 글을 쓸려고 합니다.ㅎ
기본적으로 숫자면 stack에 넣고 문자일 경우 문자별 처리를 다르게 가져가서 처리했습니다.
주의할 점으로
숫자가 10까지 있어서 10인 경우 check가 필요하다는 점
스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. 즉 stack에 값이 하나 밖에 없는데 스타상이 나온 경우를 신경 써야 한다는 점
import java.util.Stack;
// 프로그래머스 다트 게임 문제
class Solution {
public int solution(String dartResult) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
if (c == 'S') {
continue;
}
if (c == 'D') {
stack.add((int) Math.pow(stack.pop(), 2));
continue;
}
if (c == 'T') {
stack.add((int) Math.pow(stack.pop(), 3));
continue;
}
if (c == '*') {
int now = stack.pop();
if (!stack.isEmpty()) {
stack.add(stack.pop() * 2);
}
stack.add(now * 2);
continue;
}
if (c == '#') {
stack.add(stack.pop() * -1);
continue;
}
if (c - '0' == 1 && dartResult.charAt(i + 1) == '0') {
stack.add(10);
i++;
}else {
stack.add(c - '0');
}
}
int answer = 0;
for (int score : stack) {
answer += score;
}
return answer;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 거리두기 확인하기 문제(자바) (0) | 2021.09.07 |
---|---|
프로그래머스 - 서울에서 김서방 찾기 (자바) (0) | 2021.06.26 |
프로그래머스 - 110 옮기기 문제 (자바) (0) | 2021.06.15 |
프로그래머스 - 숫자 게임 문제 (자바) (0) | 2021.06.14 |
프로그래머스 셔틀버스 문제 (자바) (0) | 2021.06.07 |