일단 시작해보는 블로그

[알고리즘 풀이] 카카오 코테 기출, 다트 게임 본문

CS/알고리즘 풀이

[알고리즘 풀이] 카카오 코테 기출, 다트 게임

Selina Park 2019. 8. 24. 18:13

뒤에서 부터 계산을 해주기 위해서 자료구조는 스택을 사용했고 점수, 등급, 보너스를 따로 저장해서 하나씩 꺼내서 계산했다.

 

** 처음에 rank인 S, D, T를 입력받을 때, String으로 할당했다가 오류가 났다.  그 이유는 당연히 글자 하나씩 있으면 데이터타입을 char로 생각하기 때문에 문자열 비교를

ex)

char a = 'a';

char b = 'b';

a.equals(b); //노노노!!에러남

 

a == b 혹은 a != b 이렇게 비교해야함. 

 

 

stack으로 넣은 사진

 

package codingTest;

import java.util.Stack;

public class kakao_dart {
    public static void main(String[] args) {
        System.out.println(solution("1S2D*3T"));
        System.out.println(solution("1D2S#10S"));
        System.out.println(solution("1D2S0T"));
        System.out.println(solution("1S*2T*3S"));
        System.out.println(solution("1D#2S*3S"));
        System.out.println(solution("1T2D3D#"));
        System.out.println(solution("1D2S3T*"));
    }

    public static int solution(String dartResult){
        Stack<Integer> score = new Stack<>();
        Stack<Integer> rank = new Stack<>();
        Stack<String> bonus = new Stack<>();

        //문자열 잘라서 넣기
        String tmpStr = "";
        char tmp = 0;
        boolean check = false;
        for(int i=0; i<dartResult.length(); i++){
            tmp = dartResult.charAt(i);

            if(tmp>=48 && tmp<=57){
                if(check){
                    bonus.add("");
                    check = false;
                }
                tmpStr += String.valueOf(tmp);
            }else if(tmp == 'S' || tmp == 'D' || tmp == 'T'){
                check = true;
                if(!tmpStr.equals("")){
                    score.add(Integer.parseInt(tmpStr));
                    tmpStr = "";
                }
                if(tmp == 'S') rank.add(1);
                if(tmp == 'D') rank.add(2);
                if(tmp == 'T') rank.add(3);

            }else if(String.valueOf(tmp).equals("*") || String.valueOf(tmp).equals("#")){
                check = false;
                bonus.add(String.valueOf(tmp));
            }
        }

        if(bonus.size() < 3){
            bonus.add("");
        }

        return getAnswer(score, rank, bonus);
    }

    static int getAnswer(Stack<Integer> score, Stack<Integer> rank, Stack<String> bonus){
        int answer = 0, tmp = 0;
        boolean check = false;

        while(!score.empty() || !score.empty() || !bonus.empty()){
            tmp = (int)Math.pow(score.pop(), rank.pop());

            String bonusPop = bonus.pop();
            if(check){
                tmp *= 2;
                check = false;
            }
            if(bonusPop.equals("*")){
                tmp *= 2;
                check = true;
            }else if(bonusPop.equals("#")){
                tmp *= -1;
            }

            answer += tmp;
        }

        return answer;
    }
}

 

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

 

코딩테스트 연습 - [1차] 다트 게임 | 프로그래머스

 

programmers.co.kr

 

Comments