ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오 신입 공채 1차 코딩 테스트 문제 2. 다트 게임(난이도: 하)
    공부 2017. 11. 3. 01:14
    반응형

    카카오 블라인드 채용에 출제된 문제가 공개돼 풀어보았다.

    한 문제당 하나의 클래스로 만들었으며 테스트 코드까지 한꺼번에 올린다.

    실제 채용 시험의 채점이 어떻게 이뤄졌는지 모르지만, 문제에 나와있는 입출력은 모두 만족하는 코드이다.

    강의할 때도 늘 말하는 것이지만, 코드에 정답은 없다.

    문제를 푸는 하나의 방법이 될 수 있음을 기억하고 참고하라.


    문제 2. 다트 게임(난이도: 하)

    문제 설명과 해설은 아래 링크를 참고하라.

    http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/



    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    import org.junit.Test;
     
    import java.util.Arrays;
     
    import static org.junit.Assert.assertEquals;
     
    public class Q2 {
        public static void main(String[] args) {
     
        }
     
        @Test
        public void question2TestCase1() {
            String in = "1S2D*3T";
            int out = 37;
     
            assertEquals(out, question2(in));
        }
     
        @Test
        public void question2TestCase2() {
            String in = "1D2S#10S";
            int out = 9;
            assertEquals(out, question2(in));
        }
     
        @Test
        public void question2TestCase3() {
            String in = "1D2S0T";
            int out = 3;
            assertEquals(out, question2(in));
     
        }
     
        @Test
        public void question2TestCase4() {
            String in = "1S*2T*3S";
            int out = 23;
            assertEquals(out, question2(in));
     
     
        }
     
        @Test
        public void question2TestCase5() {
     
            String in = "1D#2S*3S";
            int out = 5;
            assertEquals(out, question2(in));
        }
     
        @Test
        public void question2TestCase6() {
            String in = "1T2D3D#";
            int out = -4;
            assertEquals(out, question2(in));
        }
     
        @Test
        public void question2TestCase7() {
     
            String in = "1D2S3T*";
            int out = 59;
            assertEquals(out, question2(in));
        }
     
     
        public int question2(String inStr) {
            String[] splitByDigits = inStr.split("[0-9]+");
            String[] splitByNonDigits = inStr.split("\\D+");
     
            int[] score = new int[splitByNonDigits.length];
     
            for (int i = 0; i < splitByNonDigits.length; i++) {
                score[i] = Integer.parseInt(splitByNonDigits[i]);
     
                if (splitByDigits[i + 1].contains("S")) {
                    score[i] = score[i];
                } else if (splitByDigits[i + 1].contains("D")) {
                    score[i] = score[i] * score[i];
                } else if (splitByDigits[i + 1].contains("T")) {
                    score[i] = score[i] * score[i] * score[i];
                } else {
                    System.err.println("Inappropriate bonus character: " + splitByDigits[i + 1]);
                }
     
                if (splitByDigits[i + 1].length() >= 2) {
                    if (splitByDigits[i + 1].contains("#")) {
                        score[i] = score[i] * -1;
                    } else if (splitByDigits[i + 1].contains("*")) {
                        if (i < 1) {
                            score[i] = score[i] * 2;
                        } else {
                            score[i - 1= score[i - 1* 2;
                            score[i] = score[i] * 2;
                        }
                    }
                }
            }
     
            int totalScore = 0;
            for (int s : score) {
                totalScore += s;
            }
     
            return totalScore;
     
        }
    }
     
    cs


    반응형
Designed by Tistory.