Jam's story
[프로그래머스] 다트게임 본문
- 변수 n은 숫자를 저장 , index는 인덱스를, nowInt는
- dartResult길이만큼 for 문을 돌려서 문자열 하나하나 마다 검사
- 해당 인덱스에 맞는 문자 1개를 c에 저장
- c가 숫자일 경우와 아닐경우로 나눔
- c가 10일경우 ( 해당하는게 1인데, 뒤에꺼가 0이면 ) n=10저장
- 10이 아닐경우 숫자 형태의 char형을 int형으로 변환.
- score 인덱스에 S,D,T ( 변수 index 는 score 배열을 위한 변수)해당 하는 값을 넣어줌
- score[0]= S 값 이런식
- * 스타상은 바로전에 얻은 점수를 2배, 바로전에 얻은 점수가 없다면, 첫번째, 있다면 index-2
- #이라면 바로전 점수를 -1 처리
class Solution {
public int solution(String dartResult) {
int answer = 0;
int n = 0, index = 0, nowInt = 0;
int[] score = new int[3]; // 각 단계별 획득 점수
for (int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
/* 점수- 숫자 일 경우 */
if (Character.isDigit(c)) {
n = 0;
if (c == '1' && dartResult.charAt(i + 1) == '0') {
n = 10;
i++; // 인덱스 다음으로 증가
} else {
n = Character.getNumericValue(c);
}
nowInt++;
/* 보너스 or 옵션일 경우 */
} else {
switch (c) {
case 'S':
score[index++] = (int) Math.pow(n, 1); // 1제곱
break;
case 'D':
score[index++] = (int) Math.pow(n, 2); // 2제곱
break;
case 'T':
score[index++] = (int) Math.pow(n, 3); // 3제곱
break;
case '*': // 스타상 : 바로 전에 얻은 점수를 각 2배
index = index - 2 < 0 ? 0 : index - 2;
while (index < nowInt) {
score[index++] *= 2;
}
n = 0;
break;
case '#': // 아차상 : 해당 점수는 마이너스
score[index-1] *= -1;
n = 0;
break;
}
}
}
for (int i : score) {
answer += i;
}
return answer;
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2022.07.11 |
---|---|
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.07.08 |
[프로그래머스] 가운데 글자 가져오기 (0) | 2022.07.05 |
[최소직사각형] (0) | 2022.07.01 |
[프로그래머스] 2016년 (0) | 2022.06.30 |
Comments