[프로그래머스] 17682. 다트 게임
문제 링크
풀이 과정
주어진 문자열의 각 문자를 S, D, T, *, #, 숫자
로 구분해 다른 작업을 하도록 구현했습니다.
숫자
일 경우 tmp 문자열 뒤에 계속 붙여나갑니다. S, D, T
를 만나면 각각 1승, 2승, 3승 연산을 해준 뒤 배열 요소에 저장합니다. *
를 만나면 해당 점수와 (이전 기록이 있다면) 이전 점수에 두 배 연산을, #
를 만나면 해당 점수에 -1를 곱해줍니다.
코드
public class Main {
public static int solution(String dartResult) {
int answer = 0;
int cnt = 0;
int idx = 0;
int[] subScore = new int[3];
String tmp = "";
int len = dartResult.length();
while (idx < len) {
char now = dartResult.charAt(idx++);
switch (now) {
case 'S':
subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 1);
tmp = "";
break;
case 'D':
subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 2);
tmp = "";
break;
case 'T':
subScore[cnt++] = (int) Math.pow(Integer.parseInt(tmp), 3);
tmp = "";
break;
case '*':
subScore[cnt - 1] *= 2;
if (cnt > 1)
subScore[cnt - 2] *= 2;
break;
case '#':
subScore[cnt - 1] *= -1;
break;
default:
tmp += now;
}
}
for (int i : subScore)
answer += i;
return answer;
}
public static void main(String[] args) {
String dartResult = "1S2D*3T";
// String dartResult = "1D2S#10S";
// String dartResult = "1D2S0T";
// String dartResult = "1S*2T*3S";
// String dartResult = "1D#2S*3S";
// String dartResult = "1T2D3D#";
// String dartResult = "1D2S3T*";
solution(dartResult);
}
}
댓글남기기