ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 다트 게임 [자바]
    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;
            }
    
        }
    }

     

    비교 분석

    • 풀이방법은 비슷하고 효율적이지는 않으나 정규식 패턴으로 사용하여 참고할 정답에 적어보았다.
    반응형

    댓글

Designed by Tistory.