[프로그래머스] 다트 게임 (Java)
🔗 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17682
👨🏻💻 내가 작성한 코드
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int count = 0; // Array에 넣은 값들의 수
int temp;
int result = 0; // 점수별 결과
ArrayList<Integer> resultArr = new ArrayList<>();
List<Integer> index = new ArrayList<>();
StringBuilder sb = new StringBuilder(dartResult);
while(sb.length() != 0) {
// S,D,T가 들어있는 index알아내기
temp = sb.indexOf("S");
if (temp != -1) index.add(temp);
temp = sb.indexOf("D");
if (temp != -1) index.add(temp);
temp = sb.indexOf("T");
if (temp != -1) index.add(temp);
int minIndex = Collections.min(index);
char score = sb.charAt(minIndex);
index.clear();
// SDT앞에 있는 숫자 확보
int number = Integer.parseInt(sb.substring(0, minIndex));
// SDT에 따른 연산
if(score == 'S') {
result = number;
}
else if(score == 'D') {
result = number*number;
}
else if(score == 'T') {
result = number*number*number;
}
if (sb.length() > (minIndex+1)) {
if (sb.charAt(minIndex+1) == '*'){
if (count == 0){
result *= 2;
}
else {
result *= 2;
resultArr.set(count-1, resultArr.get(count-1)*2);
}
sb.delete(0, minIndex+2);
}
else if (sb.charAt(minIndex+1) == '#'){
result *= (-1);
sb.delete(0, minIndex+2);
}
else sb.delete(0, minIndex+1);
}
else sb.delete(0, minIndex+1);
resultArr.add(result);
count++;
}
for (int i=0; i<resultArr.size(); i++) {
answer += resultArr.get(i);
}
return answer;
}
}
📝 결론
문제를 풀면서 최근 하반기 카카오 코딩테스 문제를 풀 때와 같이 StringIndexOutOfBoundsException오류가 많이 발생하였다. 이러한 문제는 내가 StringBuilder를 삭제하면서 마지막에 남아있는 크기를 고려하지 않아서 발생했던 것 같다.
📌StringBuilder를 삭제하며 Loop를 돌릴 때는 항상 마지막조건에 대한 index범위를 꼭 생각하자!!
또한 StringBuilder의 method들에 대해서도 다시 한번 공부해둬야겠다는 생각을 하였다.
📌 StringBuilder의 주요 Method:
append() : 문자열 맨 마지막에 문자를 추가
insert(int offset, 문자 하나) : offset위치에 문자를 추가
charAt(int index) : index위치에 있는 문자 출력
delete(int start, int end) : start부터 end-1까지 문자 제거
capacity() : StringBuilder에 할당된 크기를 반환
length() : 문자열의 길이 반환
replace(int start, int end, String str) : start부터 end-1까지 str로 변환
substring(int start, int end) : start부터 end-1까지 String형으로 반환
toString() : 문자열을 String형으로 변환
Author And Source
이 문제에 관하여([프로그래머스] 다트 게임 (Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seongwon97/프로그래머스-다트-게임-Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)