코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
import java.util.List;
import java.util.ArrayList;
class Solution {
public int solution(String dartResult) {
int[] cal = new int[3]; //3번의 기록 점수 저장 배열
int idx = 0; //cal[] 인덱스
for(int i=0; i<dartResult.length(); i++){
//숫자 판별
if(dartResult.charAt(i)>='0' && dartResult.charAt(i)<='9'){
if(i+1<dartResult.length()
&& dartResult.charAt(i)=='1' && dartResult.charAt(i+1)=='0'){
cal[idx] = 10;
i++; //10인 경우: dartResult.charAt(i+1)까지 확인했으므로 i++ 해줌
continue;
}
else {
cal[idx] = dartResult.charAt(i)-'0';
continue; //숫자 판별 -> 다른거 확인 안해도 됨 -> i++
}
}
//S,D,T 판별
if(dartResult.charAt(i)=='S'){
cal[idx] = (int)Math.pow(cal[idx],1);
idx++; //*#은 옵션이므로 일단 cal[] 인덱스++
continue;
}
else if(dartResult.charAt(i)=='D'){
cal[idx] = (int)Math.pow(cal[idx],2);
idx++;
continue;
}
else if(dartResult.charAt(i)=='T'){
cal[idx] = (int)Math.pow(cal[idx],3);
idx++;
continue;
}
//*,# 판별 : cal[]의 인덱스는 현재 다음 칸을 가리키고 있음
//그러므로 idx-1가 현위치를 의미
if(dartResult.charAt(i)=='*'){
if(idx-2>=0){
cal[idx-2] *= 2;
cal[idx-1] *= 2;
}
else
cal[idx-1] *= 2;
}
if(dartResult.charAt(i)=='#'){
cal[idx-1] *= -1;
}
}
int answer = 0;
for(int i=0; i<3; i++){
answer += cal[i];
}
return answer;
}
}
3개의 점수를 cal[] 배열에 저장하여 계산한 뒤, 3개의 점수를 합해 답을 리턴하도록 구현했다.
총 3번의 게임은 모두 [숫자+SDT] or [숫자+SDT+*#] 꼴로 나타내어진다.
그러므로 1.숫자를 확인하여 저장하고 -> 2.SDT를 확인해 1의 값을 수정하고 -> 3.*#에 따라 값을 수정한다.
세 번의 게임 점수는 각각 cal[0], cal[1], cal[2] 에 저장된다.
(cal[i]의 i를(cal[]배열의 인덱스를) 코드 내에서 idx로 표현했다.)
[숫자+SDT] or [숫자+SDT+*#] 에서, '숫자+SDT' 의 형태는 중복되므로,
1.숫자 -> 2.SDT 까지는 세 번의 게임에서 모두 계산하여 cal[idx]에 저장하고, idx++ 해준다.
만약 *#옵션이 주어지면,
숫자+SDT까지 행한 후 idx++해주었으므로 현재 위치를 idx-1로 보고 옵션 계산을 해주어야 한다.
'1d-1c > Programmers' 카테고리의 다른 글
Level1_문자열 내림차순으로 배치하기 (JAVA) (0) | 2020.12.13 |
---|---|
Level1_정수 제곱근 판별 (JAVA) (0) | 2020.12.13 |
Level1_비밀지도 (JAVA) (0) | 2020.12.11 |
Level1_실패율 (C++) (JAVA) (0) | 2020.12.09 |
Level2_카카오프렌즈 컬러링북 (JAVA) (0) | 2020.11.05 |