삐까냥의 파도타기
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 2번 문제 본문
문제 출처 : http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
지난 9월 16일(토) 오후 2시부터 오후 7시까지 5시간동안 진행한 코딩테스트입니다.
보통 코딩 테스트 문제 유출하면 안되는데, 카카오는 문제를 공개하고 직접 문제 해설도 진행했습니다.
시험 당시 제출했던 코드와 해설을 참고하여 수정한 코드를 올리겠습니다.
이것 또한 공부가 되겠죠.
문자열 처리 문제였네요.
다만 함정은 (*) or (#)입니다.
위치에 따라서 점수가 바뀌며 효과가 중첩될 수 있죠.
public class kakao2 { static int[] result = new int[3]; static int i;
public static void main(String[] args) { solution("1S2D*3T"); solution("1D2S#10S"); solution("1D2S0T"); solution("1S*2T*3S"); solution("1D#2S*3S"); solution("1T2D3D#"); solution("1D2S3T*"); }
public static int solution(String dartResult) { String[] tempNum;// = dartResult.split("[^0-9]"); //숫자만 뽑아내기 String[] tempCal;// = dartResult.split("[0-9]",-2); //연산만 뽑아내기
tempNum = getArrayRemoveNull(dartResult.split("[^0-9]")); tempCal = getArrayRemoveNull(dartResult.split("[0-9]",-2));
for(i=0; i<3; i++) { int num = Integer.valueOf(tempNum[i]); for ( int j=0; j<tempCal[i].length(); j++) { num = getCalValue(tempCal[i].charAt(j), num); } result[i] = num; } System.out.println(result[0] + result[1] + result[2]); return result[0] + result[1] + result[2]; }
static String[] getArrayRemoveNull(String[] array) { int size = 0; String[] temp = new String[3]; //3가지만 들어온다 했으므로 3개 for (int i=0; i<array.length; i++) { if(!array[i].equals("")) { //공백 제거 temp[size++] = array[i]; } } return temp; }
static int getCalValue(char temp, int value) {
switch (temp) {
case 'D' : value *= value; break;
case 'T' : value *= (value*value); break;
case '#' : value *= -1; break;
case '*' : if (i!=0) { result[i-1] *=2; } value *= 2; break;
default : break; } return value; } } |
제출한 코드와 수정한 코드가 별로 다르지 않아서 하나만 첨부합니다.
1회, 2회, 3회의 점수와 연산을 뽑아내어
1회 점수, 2회 점수, 3회 점수를 각각 구했습니다.
- 추가 코드 (17년 10월 24일) -
public class Q2 { public static void main(String[] args) { solution("1S2D*3T"); solution("1D2S#10S"); solution("1D2S0T"); solution("1S*2T*3S"); solution("1D#2S*3S"); solution("1T2D3D#"); solution("1D2S3T*"); }
static int[] scores; public static void solution(String result) { scores = new int[3]; int number = 0;
for ( int i = 0; i < result.length(); ) {
//점수 가져오기 int score = getScore(result.charAt(i)); i++; if ( score == 1 && result.charAt(i) == 48 ) { score = 10; i++; }
//보너스 가져오기 scores[number] = getBonus(score, result.charAt(i)); i++;
//옵션 세팅하기 if ( i < result.length() ) { i += setOption(result.charAt(i), number); } number++; }
printResult(); }
static int getScore(char first) { int number = 0; if ( first == 49 ) { //숫자가 1로 시작하면 10인지 확인 number = 1; } else if ( first > 49 && first <= 57 ) { number = first-48; } return number; }
static int getBonus(int score, char mul) { if ( mul == 68 ) { //D return score*score; } else if ( mul == 84 ) { //T return score*score*score; } return score; //S }
static int setOption(char temp, int number) { if ( temp == 35 ) { //#이면 *(-1) scores[number] *= (-1); return 1; } else if ( temp == 42 ) { //*이면 * 2 scores[number] *= 2; if ( number > 0 ) { scores[number-1] *= 2; } return 1; } return 0; }
static void printResult() { int result = 0; for ( int i = 0; i < 3; i++ ) { result += scores[i]; } System.out.println(result); } } |
다시 코딩하면서 짠 코드를 추가했습니다.
첫번째 소스와는 다르게 한글자씩 잘라서 구현했습니다.
2018년 1월 26일 public class kakao2 { public static void main(String[] args) { solution("1S2D*3T"); solution("1D2S#10S"); solution("1D2S0T"); solution("1S*2T*3S"); solution("1D#2S*3S"); solution("1T2D3D#"); solution("1D2S3T*"); }
static void solution(String result) { int[] setPoint = new int[3]; int nowPosition = 0; for (int i = 0; i < 3; i++ ) { //점수 int point = result.charAt(nowPosition) - 48; nowPosition++;
//점수가 10인지 확인 if (point == 1 && result.charAt(nowPosition) == '0') { point = 10; }
//제곱 계산 if (result.charAt(nowPosition) == 'D') { point = (int) Math.pow(point, 2); } else if (result.charAt(nowPosition) == 'T') { point = (int) Math.pow(point, 3); } nowPosition++;
//옵션 계산 if (nowPosition <= result.length()-1) { if (result.charAt(nowPosition) == '*') { if (i > 0) { setPoint[i-1] *= 2; } point *= 2; nowPosition++; } else if (result.charAt(nowPosition) == '#') { point = -point; nowPosition++; } }
//결과 저장 setPoint[i] = point; } System.out.println(setPoint[0] + setPoint[1] + setPoint[2]); } } |
좀 더 좋은 코드 및 다듬을 부분을 알려주시면 감사히 학습하겠습니다.
'코딩 > 카카오 코딩 테스트' 카테고리의 다른 글
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 6번 문제 (0) | 2017.09.30 |
---|---|
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 5번 문제 (0) | 2017.09.30 |
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 4번 문제 (0) | 2017.09.30 |
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 3번 문제 (3) | 2017.09.30 |
카카오 블라인드 채용 신입 공채 1차 코딩 테스트) 1번 문제 (0) | 2017.09.30 |