(Java)프로그래머스 - [1차] 다트 게임

윤준혁·2024년 3월 14일

나의 풀이

import java.util.*;

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        ArrayList<Integer> list = new ArrayList<>();

        int result = 0; // 1
        char isSDT;
        char reward;

        for (int i = 0; i < dartResult.length(); i++) {
            char char_i = dartResult.charAt(i);

            if (Character.isDigit(char_i)) { // 2
                if (char_i == '1' && dartResult.charAt(i + 1) == '0') {
                    result = 10;
                    i++;
                } else {
                    result = char_i - '0';
                }
            } else if (char_i == 'S' || char_i == 'D' || char_i == 'T') { // 3
                isSDT = char_i;
                switch (isSDT) {
                    case 'S':
                        break;
                    case 'D':
                        result = (int) Math.pow(result, 2);
                        break;
                    case 'T':
                        result = (int) Math.pow(result, 3);
                        break;
                }
                list.add(result);
            } else if (char_i == '*' || char_i == '#') { // 4
                reward = char_i;
                int index = list.size() - 1;
                if (reward == '*') {
                    if (index > 0) {
                        list.set(index - 1, list.get(index - 1) * 2);
                    }
                    list.set(index, list.get(index) * 2);
                } else if (reward == '#') {
                    list.set(index, list.get(index) * -1);
                }
            }
        }

        return answer = list.stream().mapToInt(Integer::intValue).sum();
    }
}

과정

  1. 결과를 담을 result와 S, D, T를 확인할 isSDT, *과 #을 확인할 reward를 선언
  2. 만약 i번째 문자가 숫자라면 10인지 확인해주고 10이면 i를 하나 더 증가시켜주고, result에 담는다
  3. i번째 문자가 S, D, T중 하나라면 그에 맞춰 result값을 2제곱, 3제곱을 해주고 list에 넣는다
  4. i번째 문자가 *, #중 하나라면 list의 마지막 요소를 불러와 조건에 맞게 2를 곱하거나 음수로 만들어준다
  5. list의 합을 answer에 넣어준다

다른 사람 풀이

import java.util.ArrayList;
class Solution {
    public int solution(String dartResult) {
        int answer = 0;

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

        String nStr = "";
        int cnt = 0;

        for(int i = 0; i < dartResult.length(); i++) {
            if(dartResult.charAt(i) >= 48 && dartResult.charAt(i) <= 57) {
                cnt++;
                nStr += dartResult.charAt(i);
            } else {
                if(cnt > 0) {
                    list.add(nStr);
                    nStr = "";
                    cnt = 0;
                }
                list.add(dartResult.charAt(i)+"");
            }
        }
        int count = 0;

        for(int i = 0; i < list.size(); i++) {
            if(list.get(i).equals("S")) {
                answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 1);
                count++;
            } else if(list.get(i).equals("D")) {
                answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 2);
                count++;
            } else if(list.get(i).equals("T")) {
                answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 3);
                count++;
            } else if(list.get(i).equals("#")) {
                if(count == 1) {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += Integer.parseInt(list.get(i-2)) * -1;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
                    }
                } else if(count == 2) {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += Integer.parseInt(list.get(i-2)) * -1;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
                    }
                } else {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += Integer.parseInt(list.get(i-2)) * -1;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
                    }
                }
            } else if(list.get(i).equals("*")) {
                if(count == 1) {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += (Integer.parseInt(list.get(i-2))) * 2;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
                    }
                } else if(count == 2) {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += Integer.parseInt(list.get(i-2)) * 2;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
                    } 

                    if(list.get(i-3).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-4));
                        answer += (Integer.parseInt(list.get(i-4))) * 2;
                    } else if(list.get(i-3).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-4)), 2);
                        answer += (Math.pow(Integer.parseInt(list.get(i-4)), 2)) * 2;
                    } else if(list.get(i-3).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-4)), 3);
                        answer += (Math.pow(Integer.parseInt(list.get(i-4)), 3)) * 2;
                    }

                    if(list.get(i-4).equals("S")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Integer.parseInt(list.get(i-5))*-1);
                            answer += (Integer.parseInt(list.get(i-5))*-1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Integer.parseInt(list.get(i-5)) * 2;
                            answer += Integer.parseInt(list.get(i-5)) * 4;
                        }
                    } else if(list.get(i-4).equals("D")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1);
                            answer += (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Math.pow(Integer.parseInt(list.get(i-5)), 2) * 2;
                            answer += Math.pow(Integer.parseInt(list.get(i-5)), 2) * 4;
                        }
                    } else if(list.get(i-4).equals("T")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1);
                            answer += (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Math.pow(Integer.parseInt(list.get(i-5)), 3) * 2;
                            answer += Math.pow(Integer.parseInt(list.get(i-5)), 3) * 4;
                        }
                    }

                } else if(count == 3) {
                    if(list.get(i-1).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-2));
                        answer += (Integer.parseInt(list.get(i-2))) * 2;
                    } else if(list.get(i-1).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
                    } else if(list.get(i-1).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
                        answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
                    } 

                    if(list.get(i-3).equals("S")) {
                        answer -= Integer.parseInt(list.get(i-4));
                        answer += (Integer.parseInt(list.get(i-4))) * 2;
                    } else if(list.get(i-3).equals("D")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-4)), 2);
                        answer += (Math.pow(Integer.parseInt(list.get(i-4)), 2)) * 2;
                    } else if(list.get(i-3).equals("T")) {
                        answer -= Math.pow(Integer.parseInt(list.get(i-4)), 3);
                        answer += (Math.pow(Integer.parseInt(list.get(i-4)), 3)) * 2;
                    }

                    if(list.get(i-4).equals("S")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Integer.parseInt(list.get(i-5))*-1);
                            answer += (Integer.parseInt(list.get(i-5))*-1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Integer.parseInt(list.get(i-5)) * 2;
                            answer += Integer.parseInt(list.get(i-5)) * 4;
                        }
                    } else if(list.get(i-4).equals("D")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1);
                            answer += (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Math.pow(Integer.parseInt(list.get(i-5)), 2) * 2;
                            answer += Math.pow(Integer.parseInt(list.get(i-5)), 2) * 4;
                        }
                    } else if(list.get(i-4).equals("T")) {
                        if(list.get(i-3).equals("#")) {
                            answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1);
                            answer += (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1) * 2;
                        } else if(list.get(i-3).equals("*")) {
                            answer -= Math.pow(Integer.parseInt(list.get(i-5)), 3) * 2;
                            answer += Math.pow(Integer.parseInt(list.get(i-5)), 3) * 4;
                        }
                    }
                }
            }
        }
        return answer;
    }
}

0개의 댓글