-
프로그래머스 - Lv1. 다트 게임PS 2022. 3. 4. 23:58
문제 : [2018 KAKAO BLIND RECRUITMENT 1차] 다트 게임
- 문제 내용은 여기.
- 쉽게 말해, (맞춘 점수)^(맞춘 영역의 제곱)*(보너스/이전보너스/패널티 여부)의 총합을 구하면 된다.
풀이
import java.util.stream.Stream; public class DartGame { public int solution(String str) { // sdt - S : single (^1) / D : double (^2) / T : Triple (^3) // bp - * : 보너스(* 2) / # : 패널티(* -1) String[] points = str.replaceAll("\\D+", " ").split("\\s+"); String[] calcs = Stream.of(str.replaceAll("\\d+", " ").split("\\s+")).skip(1).toArray(String[]::new); int total = 0; // 라운드별 점수/제곱/보너스or패널티 세팅 double[][] pointSdtBp = new double[points.length][3]; for (int i = 0; i < points.length; i += 1) { double point = Long.valueOf(points[i]); double sdt = "S".equals(calcs[i].substring(0,1)) ? 1 : ("D".equals(calcs[i].substring(0,1)) ? 2 : 3); double bp = calcs[i].length() == 1 ? 1 : ("*".equals(calcs[i].substring(1)) ? 2 : -1); pointSdtBp[i][0] = point; pointSdtBp[i][1] = sdt; pointSdtBp[i][2] = bp; if (i > 0 && bp == 2) pointSdtBp[i-1][2] *= bp; } // 계산 for (double[] psb : pointSdtBp) { total += Math.pow(psb[0], psb[1]) * psb[2]; } return total; } }
- calcs[]를 초기화 할 때만 Stream을 쓴 이유는, 배열 0번째에 무조건 공백문자(
""
)가 들어가게 되는데 이를 제외(skip(1)
)하기 위해서다. 이를 제외하기 위한 더 좋은 방법이 있을 것 같은데 일단 당장은 모르겠다.
후기
1 ) 사실 로직은 별로 특별할 것도 없는데 Stream을 잘 몰라서 1.5시간 정도 헤맸다(내가 익숙한 Java는 Java7이 마지막이었다...). 날 잡고 Stream 공부를 하든지, Java8 공부를 따로 하든지 해야할 것 같다.
'PS' 카테고리의 다른 글
모각코 PS스터디 / 백준 2875 "대회 or 인턴" (0) 2022.05.21 모각코 내부스터디 PS / 백준 1449번 - 수리공 항승 (2) 2022.05.13 프로그래머스 - Lv2. 오픈채팅방 (0) 2022.03.10 프로그래머스 - Lv1. 비밀지도 (0) 2022.03.04 프로그래머스 - Lv1. 2016년 (0) 2022.03.02 프로그래머스 - Lv1. 예산 (0) 2022.03.01