개요
코딩테스트 연습 - [1차] 다트 게임 | 프로그래머스 스쿨 (programmers.co.kr)
난이도 : 레벨 1
특징 : 2018 KAKAO BLIND RECRUITMENT 기출 문제
풀이법
package programmers;
import java.util.HashMap;
public class 프머스_1차_다트게임 {
public static void main(String[] args) {
System.out.println(solution("1S2D*3T"));
}
public static int solution(String dartResult) {
int answer = 0;
int currentDartNumber = 0;
int len = dartResult.length();
HashMap<Integer, Integer> results = new HashMap<>();
for (int i = 0; i < len; i++) {
char currentChar = dartResult.charAt(i);
if (Character.isDigit(currentChar)) {
currentDartNumber++;
int num = currentChar - '0';
if (i + 1 < len && dartResult.charAt(i + 1) == '0') {
num = 10;
i++;
}
results.put(currentDartNumber, num);
} else {
switch (currentChar) {
case 'S':
results.put(currentDartNumber, (int) Math.pow(results.get(currentDartNumber), 1));
break;
case 'D':
results.put(currentDartNumber, (int) Math.pow(results.get(currentDartNumber), 2));
break;
case 'T':
results.put(currentDartNumber, (int) Math.pow(results.get(currentDartNumber), 3));
break;
case '*':
if (currentDartNumber > 1) {
results.put(currentDartNumber - 1, results.get(currentDartNumber - 1) * 2);
}
results.put(currentDartNumber, results.get(currentDartNumber) * 2);
break;
case '#':
results.put(currentDartNumber, results.get(currentDartNumber) * -1);
break;
}
}
}
for (int i = 1; i <= 3; i++) {
answer += results.get(i);
}
return answer;
}
}
중점포인트
1. HashMap을 사용하여 다트 1번부터 다트 3번까지의 결과를 저장
Key : 다트 번호
Value : 점수
2. 입력의 맨 처음엔 숫자가 오므로 숫자가 오는 걸 기준으로 다트 번호를 구분한다.
3. dartResult String의 각 문자(char) 하나씩 검사하면서 나아간다.
과정
1. darResult의 char 하나씩 탐색하기 위해 반복문을 이용한다.
2. 현재 가리키는 char를 currentChar에 저장한다.
3. currentChar가 숫자라면 currentDartNumber를 올리고 10일 경우엔 i++ 를 함으로써 0을 스킵할 수 있게 해준다. 또한 마지막엔 hashMap에 currentDartNumber와 점수를 초기화해준다.
3-2. 만약 currentChar가 숫자가 아니라면 보너스 혹은 옵션이므로 swith 문을 통해 구분해서 처리해준다. 이때, 스타상(*)은 currentDartNumber가 1이면 자기 자신만 처리해야하므로 조건문을 통해 따로 계산한다.
4. 2로 돌아간다. dartResult String을 모두 탐색할 때까지
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 코테 연습]자바 - [3차] 파일명 정렬 (0) | 2024.07.08 |
---|---|
[프로그래머스 코테 연습]자바 - 주차 요금 계산 (0) | 2024.07.08 |
[프로그래머스 코테 연습]자바 - 3차 압축 (0) | 2024.06.29 |