-
프로그래머스 - 다트 게임 [자바]Algorithms/- 프로그래머스 2022. 2. 1. 02:34
- 문제 링크 : 다트 게임
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
정답
import java.util.*; import java.util.stream.*; class Solution { public int solution(String dartResult) { int answer = 0; //숫자 뽑아내기 String d = dartResult; String[] arr = d.split("[^0-9]"); arr = Arrays.stream(arr).filter(x -> !x.equals("")).toArray(String[]::new); String[] arr2 = d.split("[0-9]"); arr2 = Arrays.stream(arr2).filter(x -> !x.equals("")).toArray(String[]::new); for(int i=0; i<arr.length; i++){ double a = Double.valueOf(arr[i]); String[] arr3 = arr2[i].split(""); for(String j : arr3){ if(j.equals("S")){ a = Math.pow(a, 1); }else if(j.equals("D")){ a = Math.pow(a, 2); }else if(j.equals("T")){ a = Math.pow(a, 3); }else if(j.equals("*")){ a *= 2; if(i-1 >= 0){ arr[i-1] = String.valueOf(Double.valueOf(arr[i-1]) * 2); } }else if(j.equals("#")){ a *= -1; } } arr[i] = String.valueOf(a); } for(String i : arr){ answer += Double.valueOf(i).intValue(); } return answer; } }
분석
- 문자열 다루기
참고할 만한 정답
import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Solution { static int[] sum = new int[3]; static int solution(String msg){ String reg = "([0-9]{1,2}[S|T|D][*|#]{0,1})"; Pattern p = Pattern.compile(reg+reg+reg); Matcher m = p.matcher(msg); m.find(); for(int i=1; i<=m.groupCount(); i++){ Pattern p1 = Pattern.compile("([0-9]{1,2})([S|T|D])([*|#]{0,1})"); Matcher m1 = p1.matcher(m.group(i)); m1.find(); sum[i-1] = (int)Math.pow(Integer.parseInt(m1.group(1)), getpow(m1.group(2))); setting(i,m1.group(3)); } return(sum[0]+ sum[1]+ sum[2]); } static void setting(int idx, String msg){ if(msg.equals("*")){ sum[idx - 1] *= 2; if(idx > 1 ){ sum[idx - 2] *=2; } } else if(msg.equals("#")){ sum[idx - 1] *=-1 ; } } static int getpow(String mag){ if(mag.equals("S")){ return 1; } else if(mag.equals("D")){ return 2; } else { return 3; } } }
비교 분석
- 풀이방법은 비슷하고 효율적이지는 않으나 정규식 패턴으로 사용하여 참고할 정답에 적어보았다.
반응형