문제
https://programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
풀이
문자열 + 구현 문제이다. 필자는 조건 분기를 많이 쳐서 해결할 수 있었다.
현재 계산되고 있는 숫자와 이전의 숫자를 담을 변수를 만들어 주었고 이후 모든 문자열의 문자에 대해 for문을 돌면서 탐색할 수 있도록 하였고, 해당 문자가 숫자일 때는 따로 조건을 빼주어 새로운 while문 안에 들어갈 수 있도록 하였다.
while문 안에서는 새로운 index를 만들어 idx를 1씩 증가시키면서 보너스/옵션에 따른 또 새로운 조건 분기를 만들어 계산 처리해 줄 수 있도록 하면 된다.
그렇게 계산을 진행하다가 만약 해당 index가 가리키는 문자가 숫자일 경우 현재 계산되고 있는 숫자의 연산은 이 while문 안에서 끝난 것이므로 이전 숫자 변수에 담아준다. 그리고 기존의 이전 숫자는 더 이상 옵션의 영향을 받지 못하기 때문에 answer에 더해주고 while문을 탈출할 수 있도록 하면 된다.
이러한 루틴으로 모든 문자에 대해 반복문을 돌아주면 정답을 얻을 수 있다.
주의할 점은 숫자의 범위가 0 ~ 10 사이의 정수이기 때문에 현재 index가 숫자를 가리키고 있더라도 한 칸 뒤의 문자가 또 숫자일 가능성이 있기 때문에(EX - 10) 만약 한 칸 뒤의 숫자가 0이면 현재 숫자 변수에 10을 담아줘야 하며 문자열의 마지막 문자는 항상 보너스나 옵션이기 때문에 while문에서 마지막 index를 만나게 되면 모든 계산이 종료된 것으로 간주하고 현재 숫자와 이전 숫자를 answer에 더해줘야 한다.
코드
class Solution {
public int solution(String dartResult) {
int answer = 0;
double curNum = 0;
double befNum = 0;
for(int i = 0; i < dartResult.length(); i++) {
if(Character.isDigit(dartResult.charAt(i))) {
int idx = i + 1;
curNum = Character.getNumericValue(dartResult.charAt(i));
if(Character.getNumericValue(dartResult.charAt(i + 1)) == 0) {
curNum = 10;
idx++;
}
while (true) {
if(dartResult.charAt(idx) == 'S') {
curNum = curNum;
} else if(dartResult.charAt(idx) == 'D') {
curNum = Math.pow(curNum, 2);
} else if(dartResult.charAt(idx) == 'T') {
curNum = Math.pow(curNum, 3);
} else if(dartResult.charAt(idx) == '*') {
curNum *= 2;
befNum *= 2;
} else if(dartResult.charAt(idx) == '#') {
curNum *= -1;
}
if(idx == dartResult.length() - 1) {
answer += curNum;
answer += befNum;
return answer;
}
if(Character.isDigit(dartResult.charAt(idx))) {
answer += befNum;
befNum = curNum;
i = idx - 1;
break;
}
idx++;
}
}
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level2 더 맵게 Java (0) | 2022.05.26 |
---|---|
[프로그래머스] 프로그래머스 Level1 신고 결과 받기 Java (카카오 코딩테스트) (0) | 2022.05.25 |
[프로그래머스] 프로그래머스 Level1 완주하지 못한 선수 Java (0) | 2022.05.25 |
[프로그래머스] 프로그래머스 Level1 키패드 누르기 Java (카카오 코딩테스트) (0) | 2022.05.24 |
[프로그래머스] 프로그래머스 Level1 이상한 문자 만들기 Java (0) | 2022.05.23 |