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;
        }

    }
}

 

비교 분석

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