티스토리 뷰
algorithm/programmers
[프로그래머스/자바] 다트 게임 풀이 - 2018 KAKAO BLIND RECRUITMENT
hrniin 2022. 11. 28. 15:26728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17682
2018 KAKAO BLIND RECRUITMENT 1차 Level 1 문제다.
점수, 보너스, 옵션 순서대로 문자열이 구성되어 있으므로 for문을 통해 문자열의 값 하나하나 탐색하면 쉽게 풀 수 있다.
점수가 두자리(10)인 경우도 있으므로 StringBuilder를 사용해 1 다음 0을 append할 수 있도록 했다.
그리고 보너스를 만나면 점수가 다 StringBuilder에 저장되어 있는 형태이므로
ArrayList에 저장하고 StringBuilder를 비워준다.
보너스가 어떤 것인지에 따라 ArrayList의 가장 끝에 있는 값을 바꿔준다.
옵션 *를 만나면 ArrayList의 가장 끝 값, 끝에서 두번째 값을 2 곱해준다.
이때 size가 1인 경우 끝에서 두번째 값을 접근하면 오류가 나므로 1보다 큰 경우만 끝에서 두번째 값을 곱해준다.
옵션 #를 만나면 ArrayList의 가장 끝 값을 -1 곱해준다.
가장 끝 값의 인덱스를 접근하기 위해 size를 나타내는 변수를 따로 만들고
ArrayList에 StringBuilder의 값을 더해줄 때마다 size를 1씩 더해줬다.
배운점 및 느낀점
ArrayList의 set 함수를 통해 해당 인덱스의 값을 변경할 수 있다는 걸 새롭게 알았다!
import java.util.*;
class Solution {
public int solution(String dartResult) {
ArrayList<Integer> num = new ArrayList<>();
StringBuilder sb = new StringBuilder();
int size = 0;
for(char c : dartResult.toCharArray()) {
if(c >= '0' && c <= '9') // 숫자인 경우
sb.append(c);
else if(c >= 'A' && c <= 'Z') { // 보너스인 경우
num.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
size++;
if(c == 'S')
continue;
else if(c == 'D')
num.set(size - 1, (int)Math.pow(num.get(size - 1), 2));
else if(c == 'T')
num.set(size - 1, (int)Math.pow(num.get(size - 1), 3));
}
else {
if(c == '*') { // 옵션인 경우
num.set(size - 1, num.get(size - 1) * 2);
if(size != 1)
num.set(size - 2, num.get(size - 2) * 2);
}
else if(c == '#') {
num.set(size - 1, num.get(size - 1) * -1);
}
}
}
return num.get(0) + num.get(1) + num.get(2);
}
}
728x90
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] 캐시 풀이 - 2018 KAKAO BLIND RECRUITMENT (0) | 2022.11.29 |
---|---|
[프로그래머스/자바] 비밀지도 풀이 - 2018 KAKAO BLIND RECRUITMENT (0) | 2022.11.29 |
[프로그래머스/자바] 카드 짝 맞추기 풀이 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.11.28 |
[프로그래머스/자바] 자물쇠와 열쇠 풀이 - 2020 KAKAO BLIND RECRUITMENT (0) | 2022.11.25 |
[프로그래머스/자바] 후보키 풀이 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.11.24 |