-
카카오 신입 공채 1차 코딩 테스트 문제 2. 다트 게임(난이도: 하)공부 2017. 11. 3. 01:14반응형
카카오 블라인드 채용에 출제된 문제가 공개돼 풀어보았다.
한 문제당 하나의 클래스로 만들었으며 테스트 코드까지 한꺼번에 올린다.
실제 채용 시험의 채점이 어떻게 이뤄졌는지 모르지만, 문제에 나와있는 입출력은 모두 만족하는 코드이다.
강의할 때도 늘 말하는 것이지만, 코드에 정답은 없다.
문제를 푸는 하나의 방법이 될 수 있음을 기억하고 참고하라.
문제 2. 다트 게임(난이도: 하)
문제 설명과 해설은 아래 링크를 참고하라.
http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113import org.junit.Test;import java.util.Arrays;import static org.junit.Assert.assertEquals;public class Q2 {public static void main(String[] args) {}@Testpublic void question2TestCase1() {String in = "1S2D*3T";int out = 37;assertEquals(out, question2(in));}@Testpublic void question2TestCase2() {String in = "1D2S#10S";int out = 9;assertEquals(out, question2(in));}@Testpublic void question2TestCase3() {String in = "1D2S0T";int out = 3;assertEquals(out, question2(in));}@Testpublic void question2TestCase4() {String in = "1S*2T*3S";int out = 23;assertEquals(out, question2(in));}@Testpublic void question2TestCase5() {String in = "1D#2S*3S";int out = 5;assertEquals(out, question2(in));}@Testpublic void question2TestCase6() {String in = "1T2D3D#";int out = -4;assertEquals(out, question2(in));}@Testpublic 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 반응형