알고리즘/programmers

프로그래머스 레벨1 다트게임 (JAVA)

dev-jo 2021. 7. 4. 21:52

 

주말이다. 평일에 풀었던걸 오늘 올려본다..

 

모든 코드는 GitHub  올려놓았다.

 

이번 문제는 목요일? 쯤 풀었던 거 같다..

 

https://programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

 

프로그래머스 레벨 1 다트게임이다..

 

퇴근 15분 전에 잠깐 푼 거라 너무 개떡같이 푼 거 같다.. 나중에 시간 나면 코드를 줄여봐야겠다..

 

( 블로그에 올리기 쪽팔림 )

 

import java.util.ArrayList;

class Solution {
public int solution(String dartResult) {
        int answer = 0;

        ArrayList<String> list = new ArrayList<>();

        String[] arr = dartResult.split("");


        StringBuilder builder = new StringBuilder();


        int count = 0;
        builder.append(arr[0]);
        for (int i = 1; i < arr.length; i++) {
            try {
                int num = Integer.parseInt(arr[i]);

                if(count == 0) {
                    builder.append(num);
                } else {
                    list.add(builder.toString());
                    builder.delete(0, builder.length());
                    builder.append(num);
                    count = 0;
                }

            } catch (NumberFormatException e) {
                builder.append(arr[i]);
                if (i == arr.length - 1) {
                    list.add(builder.toString());
                }
                count++;
            }

        }

        ArrayList<Integer> integerArrayList = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {
            String[] tempArr = list.get(i).split("");
            int num = pow(tempArr);

            int c = 2;
            if(tempArr[0].equals("1") && tempArr[1].equals("0")) {
                c = 3;
            }
            for(int j=c; j<tempArr.length; j++) {
                if(tempArr[j].equals("*")) {
                    if(i == 0) {
                        num *= 2;
                    } else {
                        num *= 2;
                        integerArrayList.set(i -1, integerArrayList.get(i -1) * 2);
                    }
                } else {
                    num *= -1;
                }
            }

            integerArrayList.add(num);


        }


        for(Integer i : integerArrayList) {
            answer += i;
        }

        return answer;
    }

    private int pow(String[] arr) {
        if(arr[0].equals("1") && arr[1].equals("0")) {
            switch (arr[2]) {

                case "S" :
                    return (int) Math.pow(10, 1);
                case "D":
                    return (int) Math.pow(10, 2);

                case "T":
                    return (int) Math.pow(10, 3);


            }
        } else {
            switch (arr[1]) {

                case "S" :
                    return (int) Math.pow(Integer.parseInt(arr[0]), 1);
                case "D":
                    return (int) Math.pow(Integer.parseInt(arr[0]), 2);

                case "T":
                    return (int) Math.pow(Integer.parseInt(arr[0]), 3);


            }
        }

        return 0;
    }
}

 

 

문자열을 숫자를 따로 분리하고

 

패턴에 맞게 수를 더해주고 곱해주었다..

 

분명 더 짧게 정말 짧게 될 텐데.. 나중에 줄여봐야겠다..