코딩테스트

[코딩테스트(Java)] 프로그래머스 17682 다트 게임

inhooo00 2025. 3. 7. 13:59

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

public int solution(String dartResult) {
    int answer = 0;
    List<Integer> result = new ArrayList<>();
    String number = "";

    for (int i = 0; i < dartResult.length(); i++) {
        switch (dartResult.charAt(i)) {
            case 'S':
                result.add((int) Math.pow(Integer.parseInt(number), 1));
                number = "";
                break;
            case 'D':
                result.add((int) Math.pow(Integer.parseInt(number), 2));
                number = "";
                break;
            case 'T':
                result.add((int) Math.pow(Integer.parseInt(number), 3));
                number = "";
                break;
            case '*':
                if (result.size() == 1) {
                    result.set(0, result.get(0) * 2);
                } else if (result.size() == 2 || result.size() == 3){
                    result.set(result.size() - 2, result.get(result.size() - 2) * 2);
                    result.set(result.size() - 1, result.get(result.size() - 1) * 2);
                }
                break;
            case '#':
                result.set(result.size() - 1, result.get(result.size() - 1) * -1);
                break;
            default:
                number += dartResult.charAt(i);
                break;
        }
    }
    answer = result.get(0) + result.get(1) + result.get(2);
    return answer;
}

 

📍포인트

1 .처음 다트 3번 던지는 기준을 어떻게 나눌지가 가장 고민이였음.
2. 그 뒤의 로직은 리스트 순서 관리만 잘 하면 해결.
3. 재활 2일차

 

📍삽질

1. 다트 게임 3번을 나눠서 진행 vs 한 라인씩 계산해가면서 진행. 전자부터 시작했지만 구현 실패 후, 후자로 마무리. 
2. 맨 처음에는 정규식으로 3번의 다트를 구분하려다가 시간을 날림. -> 앞으로 정규식은 차선책으로만 생각하자..