[JAVA 문제 풀이] 295. 다트 게임

프로그래머스 (17682)
Stupefyee's avatar
Jun 03, 2025
[JAVA 문제 풀이] 295. 다트 게임
notion image
 

내가 작성한 코드

import java.util.regex.Matcher; import java.util.regex.Pattern; class Solution { public int solution(String dartResult) { // 숫자와 대문자 사이 경계에서 문자열을 분리 String[] parts = new String[3]; Pattern pattern = Pattern.compile("\\d+[A-Z][^\\d]*"); // 숫자와 대문자 사이 경계 Matcher matcher = pattern.matcher(dartResult); // 정규 표현식으로 매칭 int[] scores = new int[3]; int index = 0; // 매칭된 부분을 parts 배열에 저장 while (matcher.find()) { parts[index++] = matcher.group(); } // 각 부분을 점수로 변환 for (int i = 0; i < 3; i++) { String part = parts[i]; String numStr = part.replaceAll("[^0-9]", ""); // 숫자만 분리 int score = Integer.parseInt(numStr); // 점수 배율 계산 if (part.contains("S")) { scores[i] = score; } if (part.contains("D")) { scores[i] = (int) Math.pow(score, 2); } if (part.contains("T")) { scores[i] = (int) Math.pow(score, 3); } // 보너스 처리 if (part.contains("*")) { scores[i] *= 2; if (i > 0) { scores[i - 1] *= 2; // 이전 점수도 두 배로 } } else if (part.contains("#")) { scores[i] *= -1; // 점수 반전 } } return scores[0] + scores[1] + scores[2]; } }
 

다른 사람의 코드

import java.util.*; class Solution { public int solution(String dartResult) { Stack<Integer> stack = new Stack<>(); // 각 라운드의 점수를 저장할 스택 int sum = 0; // 현재 계산 중인 점수 // 다트 결과 문자열을 한 글자씩 순회 for (int i = 0; i < dartResult.length(); ++i) { char c = dartResult.charAt(i); // 숫자인 경우(점수) if (Character.isDigit(c)) { sum = (c - '0'); // 문자 '0'~'9'를 숫자로 변환 // 10점 처리 (1 다음에 0이 오는 경우) if (sum == 1 && i < dartResult.length() - 1 && dartResult.charAt(i + 1) == '0') { sum = 10; i++; // 0을 한 번 더 건너뜀 } stack.push(sum); // 점수를 스택에 저장 } else { // 보너스나 옵션 문자 처리 int prev = stack.pop(); // 직전 점수 꺼내기 // 보너스 처리 if (c == 'D') { prev *= prev; // 제곱 } else if (c == 'T') { prev = prev * prev * prev; // 세제곱 } // 옵션 처리 else if (c == '*') { // 이전 점수가 있으면 두 배로 if (!stack.isEmpty()) { int val = stack.pop() * 2; stack.push(val); } prev *= 2; // 현재 점수도 두 배 } else if (c == '#') { prev *= (-1); // 현재 점수 마이너스 } // 계산된 점수를 다시 스택에 저장 stack.push(prev); } } // 스택에 남은 점수 모두 합산 int totalScore = 0; while (!stack.isEmpty()) { totalScore += stack.pop(); } return totalScore; } }
 
Share article

stupefyee