Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 백엔드
- 구름LEVEL
- 스프링
- 개발자
- 코딩테스트
- 해결
- 구현
- 배열
- bfs
- 인텔리제이
- 프로그래머스
- HashMap
- 도커
- 스프링부트
- 자료구조
- 스타트업
- Linux
- 문자열
- 스프링 부트
- 명령어
- spring
- 이직
- HTTP
- IntelliJ
- docker
- 해시맵
- 주니어
- spring boot
- dfs
- Java
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 다트 게임 (Java) 본문
반응형
노가다 이외의 방법으로 풀어보려고 몇 번 두고 계속 봤던 문제인데, 결국 문제를 읽으며 예외처리를 하나씩 추가해나가는 방식으로 문제를 풀 수밖에 없었다.
- 다트 던지기가 3라운드로 제한되어 있으니 숫자별로 자르는 동작 없이 한 번에 문자 한 개씩 읽어가며 문제를 해결하고자 함. 이를 위해 별도의 int[] arr, idx를 선언하여 사용
- 숫자를 읽어올 때마다 직전 점수를 int[] arr에 저장함
- 현재 문자가 숫자인데 다음 문자가 '0'일 경우 숫자 10으로 판단, 10으로 저장 후 인덱스 두 번 증가
- 스타상(*)의 경우 직전 점수도 2배가 되어야 하므로 int[] arr에 저장된 직전 배열을 2배로 곱해줌
- 마지막 index인 경우 점수를 int[] arr에 저장
Note
- 다른 사람들의 풀이를 보니 나보다 더 난잡하게 푼 경우도 많아서 그나마 위안을 얻었다.
class Solution {
public int solution(String result) {
int answer = 0;
int[] arr = new int[3];
int idx = 0;
int number = 0;
for(int i = 0; i < result.length(); i++){
char c = result.charAt(i);
if(c >= '0' && c <= '9'){
if(number != 0){
arr[idx] = number;
idx++;
number = 0;
}
if(result.charAt(i + 1) == '0'){
number = 10;
i++;
continue;
}else{
number = Character.getNumericValue(c);
}
continue;
}
if(c == 'D'){
number = number * number;
}else if(c == 'T'){
number = number * number * number;
}
if(c == '*'){
if(idx > 0){
arr[idx - 1] *= 2;
}
number *= 2;
}else if(c == '#'){
number = -number;
}
if(i == result.length() - 1){
arr[idx] = number;
}
}
for(int n : arr){
answer += n;
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (Java) (0) | 2023.01.27 |
---|---|
[프로그래머스] 우박수열 정적분 (Java) (0) | 2023.01.25 |
[프로그래머스] 멀리 뛰기 (Java) (0) | 2023.01.20 |
[프로그래머스] 신고 결과 받기 (Java) (0) | 2023.01.20 |
[프로그래머스] 전화번호 목록 (Java) (0) | 2023.01.20 |
Comments