https://programmers.co.kr/learn/courses/30/lessons/17682?language=java
풀이
다트 게임은 3번의 기회로 구성되니 각 기회마다 얻을 수 있는 점수를 저장할 배열 score을 만들었다.
dartResult를 char배열로 만들어 for문으로 문자열을 하나씩 돌린다.
- 해당 문자열이 숫자일 때는 점수저장을 위해 string s 에 더해준다.
- 해당 문자열이 보너스(S, D, T)일 때는 s를 int로 바꾸어 score배열에 넣는다.
- 그 후 각 보너스에 맞게 점수 연산 후, 그 다음 문자열이 옵션(*,#)일 때, 옵션에 맞는 연산도 해준다.
- 다트 횟수를 증가시키고(cnt++), 점수를 초기화 해준다. (s="")
그렇게 각 점수를 저장한 score 배열을 더한 값을 return 해준다.
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
char cc[] = dartResult.toCharArray();
int score [] = {0,0,0};
int cnt=0; // 다트기회
String s=""; // 매 기회 점수
for(int i=0; i<cc.length; i++){
if(Character.isDigit(cc[i]) == true) // 숫자면 다음으로 넘어감
{
s += cc[i];
System.out.println(s);
}
else if (cc[i]=='S'||cc[i]=='D'||cc[i]=='T') { // S,D,T 일 때
score[cnt] = Integer.parseInt(s);
if (cc[i]=='D') score[cnt]= score[cnt]*score[cnt];
if (cc[i]=='T') score[cnt]= score[cnt]*score[cnt]*score[cnt];
if (i!=cc.length-1){
if (cc[i+1]=='*') {
if(cnt != 0)
score[cnt-1] *=2;
score[cnt] *=2;
}
if (cc[i+1]=='#') score[cnt] *= (-1);
}
cnt++; // 다음 기회로 넘어감
s=""; // 점수초기화
}
}
for(int i:score){
answer += i;
}
return answer;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 정수 내림차순으로 배치하기 (0) | 2022.02.19 |
---|---|
[Java] 프로그래머스 : 신고 결과 받기 (0) | 2022.02.18 |
[Java] 프로그래머스 : 비밀지도 (0) | 2022.02.14 |
[Java] 프로그래머스 : 완주하지 못한 선수 (feat. HashMap) (0) | 2022.02.14 |
[Java] 프로그래머스 : 키패드 누르기 (0) | 2022.02.14 |