일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- jenkins
- web
- html
- programmers
- cookie
- spring
- WIL
- Anolog
- 항해99
- javascript
- flask
- hanghae99
- 생명주기 콜백
- SseEmitter
- oauth
- Stream
- google oauth
- JWT
- jQuery
- Java
- Spring Security
- real time web
- JPA
- Project
- bean
- server send event
- DI
- session
- python
- Hibernate
Archives
- Today
- Total
끄적끄적 코딩일지
[Programmers][1차] 다트게임(난이도:★★★★★★) 본문
https://programmers.co.kr/learn/courses/30/lessons/17682
class Solution {
public int solution(String dartResult){
int[] arry = solutionA(dartResult,new int[]{});
int sum = 0 ;
for(int i : arry){
sum += i;
}
return sum;
}
public int[] solutionA(String t,int[] scores){
char[] arry = t.toCharArray();
int idx = 0;
// step1. 각 점수단위를 잘라낸다
// 3번째 글자부터 분석하여 숫자가 나올경우 해당 idx를 반환한다.
for(int i = 2; i < arry.length;i++){
if(isNumber(arry[i])){
idx = i;
break;
}
}
// step2. step1에서 찾은 index으로 자르면 1게임의 점수가 반환된다.
// 단 index값이 0이면 마지막 게임이므로 t 값 그대로 진행한다.
String tmp = t;
if(idx != 0)
tmp = t.substring(0,idx);
String num = "";
int number = 0;
for(char i : tmp.toCharArray()){
// 숫자면 num에 붙이고 그 값을 number에 저장한다.
// 기존 number에 10을 곱하는 이유는 두자리 수가 나오는 경우를 처리하기 위함
// 그리고 나머지 경우를 처리한다.
if(isNumber(i)){
int num = (i-48);
number = (number * 10) + num;
}else if(i == 35){
number *= -1;
}else if(i == 42){
number *= 2;
if(scores.length != 0){
scores[scores.length-1] = scores[scores.length-1] * 2;
}
}else{
number = findMulti(i).getMulti(number);
}
}
// 배열에 점수를 더하는 이유는 스타상(*)의 점수를 처리하려면
// 전 게임의 점수가 필요하기 때문
scores = add(scores,number);
// 마지막 게임이면 최종 점수 배열을 반환한다.
// 아니라면 idx기준으로 자르고 제귀함수 실행
if(idx == 0)
return scores;
else{
t = t.substring(idx);
return solutionA(t,scores);
}
}
// 숫자 판별
public boolean isNumber(char i){
return i > 47 && i < 58;
}
// 배열 append 하기
public int[] add(int[] s,int n) {
int[] res = new int[s.length+1];
int idx = 0;
for(int f: s) {
res[idx++] = f;
}
res[idx] = n;
return res;
}
// char 값으로 Multi값 찾기
public Multi findMulti(char i){
return Multi.valueOf(String.valueOf(i));
}
//Enum 사용
// S,D,T 값에 따라서 점수 반환
enum Multi{
S,D,T;
public int getMulti(int num) {
if(this.ordinal() == 0)
return num;
else if(this.ordinal() == 1)
return num * num;
else
return num*num*num;
}
}
}
'알고리즘' 카테고리의 다른 글
[Programmers]크레인 인형뽑기(난이도:★★★★★★) (0) | 2022.05.17 |
---|---|
[Programmers]키페드 누르기(난이도:★★★★★★) (0) | 2022.05.17 |
[Programmers][1차] 비밀지도(난이도:★★★★★★) (0) | 2022.05.17 |
[Programmers]폰켓몬(난이도:★★★★★) (0) | 2022.05.17 |
[Programmers]체육복(난이도:★★★★★) (0) | 2022.05.17 |