ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] (1차) 다트 게임
    개발공부/코딩테스트 연습문제 2022. 1. 13. 12:46

    문제 설명과 제한사항

     

    풀이

    import java.util.*;
    class Solution {
        public int solution(String dartResult) {
            int answer = 0;
            int tmp = 0;
            int count = 0;
            String[] dR = dartResult.split("");
            List<Integer> score = new ArrayList<Integer>();
    
            score.add(0);
            
            for(int i = 0; i < dR.length; i++){
                if(Character.isDigit(dartResult.charAt(i))) { 
                    if(dR[i].equals("0") && dR[i-1].equals("1")) {
                        dR[i] = "10";
                    }
                    tmp = Integer.parseInt(dR[i]);
                }
                else {
                    switch (dR[i]) {
                        case "S" :
                            score.add(tmp);
                            count++;
                            break;
                        case "D" :
                            score.add(tmp * tmp);
                            count++;
                            break;
                        case "T" :
                            score.add(tmp * tmp * tmp);
                            count++;
                            break;
                        case "*" :
                            score.add(score.get(count-1)*2);
                            score.add(score.get(count)*2);
                            score.remove(count);
                            score.remove(count-1);
                           
                            break;
                        case "#" :
                            score.add(score.get(count)*(-1));
                            score.remove(count);
                            break;
                    }
                }
            }
            for(Integer s : score){
                answer += s;
            }
            return answer;
        }
    }

     

    ++

    테스트5, 테스트8 런타임 오류 잡아야한다..

     

    import java.util.*;
    
    class Solution {
        public int solution(String dartResult) {
            int answer = 0;
            int tmp = 0;
            int count = 0;
            List<Integer> score = new ArrayList<Integer>();
            String[] dR = dartResult.split("");
            
            score.add(0);
            
            for(int i = 0; i < dR.length; i++){
                if(Character.isDigit(dR[i].charAt(0))) { 
                    if( i > 0 && dR[i].equals("0") && dR[i-1].equals("1")) {
                        dR[i] = "10";
                    }
                    tmp = Integer.parseInt(dR[i]);
                }
                else {
                    switch (dR[i]) {
                        case "S" :
                            score.add(tmp);
                            count++;
                            break;
                        case "D" :
                            score.add(tmp * tmp);
                            count++;
                            break;
                        case "T" :
                            score.add(tmp * tmp * tmp);
                            count++;
                            break;
                        case "*" :
                            score.add(score.get(count-1)*2);
                            score.add(score.get(count)*2);
                            score.remove(count);
                            score.remove(count-1);
                           
                            break;
                        case "#" :
                            score.add(score.get(count)*(-1));
                            score.remove(count);
                            break;
                    }
                }
            }
            for(Integer s : score){
                answer += s;
            }
            return answer;
        }
    }

    ++ 

    런타임 에러는 if(dR[i].equals("0") && dR[i-1].equals("1"))

    이부분에서 잡았다. 사실 신경이 쓰이긴 했지만. 0이 처음에 왔을때 i-1을 하면 인덱스 범위에서 벗어나는 발생하는 문제였다. 

    하드 코딩으로 푼 것 같은 느낌이 강한데.

    1. Character.isDigit(dR[i].charAt(0)) : 문자가 숫자인지 아닌지 판단.

    2. Integer.parseInt(dR[i]) : 문자열을 숫자로 반환

    두개를 제외하면 기본적인 반복문과 리스트를 활용한 풀이였다.

     

    ++

    import java.util.*;
    
    class Solution {
        public int solution(String dartResult) {
            int answer = 0;
            int tmp = 0;
            int count = 0;
            List<Integer> score = new ArrayList<Integer>();
            String[] dR = dartResult.split("");
            
            score.add(0);
            
            for(int i = 0; i < dR.length; i++){
                if(Character.isDigit(dR[i].charAt(0))) { 
                    if( i > 0 && dR[i].equals("0") && dR[i-1].equals("1")) {
                        dR[i] = "10";
                    }
                    tmp = Integer.parseInt(dR[i]);
                }
                else {
                    switch (dR[i]) {
                        case "S" :
                            score.add(tmp);
                            count++;
                            break;
                        case "D" :
                            score.add(tmp * tmp);
                            count++;
                            break;
                        case "T" :
                            score.add(tmp * tmp * tmp);
                            count++;
                            break;
                        case "*" :
                            score.set(count-1 ,score.get(count-1)*2);
                            score.set(count, score.get(count)*2);
                            break;
                        case "#" :
                            score.set(count, score.get(count)*(-1));
                            break;
                    }
                }
            }
            for(Integer s : score){
                answer += s;
            }
            return answer;
        }
    }

    ++ 

    코드가 너무 길어서 줄이고 싶었는데

    List에서 값을 교체하는 내장 함수를 찾아서 사용했다.

     List<Integer> score = new ArrayList<Integer>(); 

    ->score.set(count-1 ,score.get(count-1)*2);

    count -1 인덱스에 있는 값을 score.get(count-1)*2 로 교체한 것임.
                            

     

Designed by Tistory.