강의로 돌아가기
한유경

17, 20, 21번이 틀리는 이유가 뭘까요..

반례 있을까요?

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int tmp = 0;
        int preScore = 0; // 이전 점수 저장용 변수
        boolean pre_bonus_star = false; // 이전 점수에서 스타상을 받았는지?

        Pattern pattern = Pattern.compile("[0-9]+[SDT]\\W?");
        Matcher m = pattern.matcher(dartResult);
        while(m.find()) {
            String dart = m.group();

            int score = 0;
            if(dart.startsWith("10")) score = 10;
            else score = Integer.parseInt(dart.substring(0, 1));

            String area = "S";
            if(dart.contains("D")) area = "D";
            if(dart.contains("T")) area = "T";

            String bonus = "";
            if(dart.contains("*")) bonus = "*";
            if(dart.contains("#")) bonus = "#";

            // 계산
            if(area.equals("S")) {
                tmp = score;
            } else if(area.equals("D")) {
                tmp = score*score;
            } else if (area.equals("T")){
                tmp = score*score*score;
            }

            if(bonus.equals("*")) {
                tmp = tmp * 2 + preScore;
                preScore = tmp - preScore;
            } else if(bonus.equals("#") && pre_bonus_star) {
                tmp *= (-2);
                preScore = tmp;
            } else if(bonus.equals("#")) {
                tmp *= (-1);
                preScore = tmp;
            } else {
                preScore = tmp;
            }

            pre_bonus_star = bonus.equals("*");
            answer += tmp;
        }

        return answer;
    }
}
1 개의 답변
김찬효

입력값 〉 "3D3T#3D"
입력값 〉 "3D*3T#3D*"
기댓값 〉 -18
실행 결과 〉 실행한 결괏값 -72이 기댓값 -18과 다릅니다.

  • 한유경

    감사합니다 ㅠㅠ 중첩된 아차상에서 문제를 잘못 이해한 거였습니다..

    한유경―2023.01.12 22:34
  • 김동현

    +9-27+9면 -18이 아니라 -9가 맞지 않나요?

    김동현―2023.04.16 00:09
  • 김찬효

    동현님이 말씀하신게 맞습니다. 제가 입력값을 "3D*3T#3D*" 으로 작성하였는데, 프로그래머스 사이트에서 마크다운 적용 과정에서 * 문자가 무시된것 같네요ㅜㅜ 본문 수정하였습니다.

    김찬효―2023.06.15 07:42
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.