
Problem Solving
```[프로그래머스] 다트 게임 — Java
문제를 해결하며 사용한 핵심 아이디어와 주의할 점을 정리합니다.
```문제 정보
```| 플랫폼 | 프로그래머스 |
| 문제 | 다트 게임 |
| 난이도 | Level 1 |
| 언어 | Java |
| 문제 링크 | 문제 바로가기 → |
1. 문제 요약
다트를 3번 던진 결과를 짜야함. 문제 조건에 따라서 여러 이벤트가 있음.
2. 핵심 아이디어
핵심```
dartResult를 순회하며 그때 그때 처리하자O(N)
```문제 봤을때 일단.. 다트 점수가 1~10까지 있어서, 점수가 두 자리인 경우도 있는게 까다로웠습니다.
정규표현식을 사용하면 좀 쉽게 토큰들을 뺄 수 있지만.. 정규 표현식을 잘 다루지 못하기 때문에 패스!
-> 숫자 이후에는 무저건 "SDT" 중 하나의 문자열이 들어옵니다.
이를 이용해서, dartResult 순회를 돌며 문자들을 받아서 처리 했습니다.
맵 같은 딕셔너리 활용하면 좋은거 같습니다.
주어진 특정 조건에 맞는 분기처리를 저는 contains를 활용해서 했습니당~
4. 풀이 코드
import java.util.*;
class Solution {
public int solution(String dartResult) {
Map<String, Integer> dic = Map.of("S",1, "D",2, "T",3);
int answer = 0;
String[] input = dartResult.split("");
int [] darts = new int[3];
int dartIdx = 0;
String prevNum = "";
for (int i =0; i<dartResult.length();i++) {
String e = input[i];
if ("SDT".contains(e)) {
int point = Integer.parseInt(prevNum);
darts[dartIdx++] = (int) Math.pow(point, dic.get(e));
prevNum="";
} else if ("#*".contains(e)) {
if (e.equals("#")) {
darts[dartIdx-1]*=-1;
continue;
}
darts[dartIdx-1]*=2;
if (dartIdx>1)
darts[dartIdx-2]*=2;
} else {
prevNum += e;
}
}
return Arrays.stream(darts).sum();
}
}
5. 복잡도
시간 복잡도: O(N)
```공간 복잡도: O(1)
```포문 한번 돌아서
7. 회고
어려웠던 점
```Java가 익숙치 않았습니다.
처음에 List로 접근 해봤는데 이건 아닌거같은.. 느낌이.. 배열 + idx로 접근 하는 방법 좋네요..
그리고 또 고민은 문자열을 char로 접근할지 String으로 접근할지 였는데, char는 기본 자료형이니까 스택에 값저장되서 비교가 좋다는 것? String은 equals조심해서 해야한다는 것?..
문자열도 금방 익숙해지면 좋겠네요.
배운 점
새롭게 익힌 알고리즘, 자료구조, 문법을 작성합니다.
다음에 적용할 점
비슷한 문제를 만났을 때 먼저 확인할 기준을 작성합니다.
```한 줄 정리
따봉
'Backend > 프로그래머스-자바' 카테고리의 다른 글
| [프로그래머스] Java - Level4 | 동굴 탐험 | PS일지 (0) | 2026.08.09 |
|---|---|
| [프로그래머스] Java / Level 1 - 붕대감기 | PS일지 (0) | 2026.07.27 |