https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
처음에 문제를 몇번 읽은 것 같다. 단순 점수계산인데 이런 경우는 이렇고~저런 경우는 저렇고~좀 정리가 필요했다.
처음에 정규표현식을 사용해서 한 세트씩 추출해내고 싶었지만, 방법을 찾지 못해서 그냥 해결했다.
딱히 어떤 알고리즘을 필요한 문제는 아니고, 글 읽는 것 처럼 코드를 작성하면 되는 것 같다.
해결 방법은,
먼저 문자열에서 S,D,T의 index번호를 list에 저장하고 하나씩 꺼내면서 index를 기준으로 왼쪽에는 점수/오른쪽에는 옵션이 위치해 있다.
이후에는 이 정보들 가지고 문제에서 요구한 대로 코드를 작성하면 된다. 그리고, 점수를 검사할 때 charAt을 사용하여 점수값을 찾았는데, 점수 자릿수가 2자리 인 경우는 10과 0이 동일시 되기 때문에 index-1와 index-2자리 까지 검사해 주었다.
// https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
// 다트게임
import java.util.*;
import java.lang.Math;
class Solution {
public int solution(String dartResult) {
int[] score = new int[3];
int[] indexs = new int[3];
int index = 0;
for (int i = 0; i < dartResult.length(); i++) {
if (dartResult.charAt(i) == 83 || dartResult.charAt(i) == 68 || dartResult.charAt(i) == 84) { // 아스키코드를 사용하여
// S,D,T의 위치
// 추출
indexs[index++] = i;
}
}
for (int i = 0; i < 3; i++) {
index = indexs[i];
int num = Integer.parseInt(String.valueOf(dartResult.charAt(index - 1)));
if (dartResult.charAt(index - 1) == '0' && index - 2 >= 0 && dartResult.charAt(index - 2) == '1') { // 10인 경우 index-1 / index-2까지 검사
num = 10;
}
if (i == 0) {
if (dartResult.charAt(index) == 'D') {
num = (int) Math.pow(num, 2);
} else if (dartResult.charAt(index) == 'T') {
num = (int) Math.pow(num, 3);
}
if (dartResult.charAt(index + 1) == '*') {
num *= 2;
} else if (dartResult.charAt(index + 1) == '#') {
num *= -1;
}
} else {
if (dartResult.charAt(index) == 'D') {
num = (int) Math.pow(num, 2);
} else if (dartResult.charAt(index) == 'T') {
num = (int) Math.pow(num, 3);
}
if (index + 1 < dartResult.length()) {
if (dartResult.charAt(index + 1) == '*') {
if (dartResult.charAt(indexs[i - 1]) == '*') {
score[i - 1] *= 2;
} else if (dartResult.charAt(indexs[i - 1]) == '#') {
score[i - 1] *= 2;
}
score[i - 1] *= 2;
num *= 2;
} else if (dartResult.charAt(index + 1) == '#') {
num *= -1;
}
}
}
score[i] = num;
}
int result = 0;
for (int n : score) {
result += n;
}
return result;
}
}
'알고리즘 문제' 카테고리의 다른 글
카카오 코딩테스트 - 프렌즈 4블록 (0) | 2019.09.07 |
---|---|
카카오 코딩테스트 - 뉴스 클러스터링 (0) | 2019.09.06 |
카카오 코딩테스트 - 비밀지도 (0) | 2019.09.04 |
카카오 코딩테스트 - 길 찾기 게임 (0) | 2019.09.03 |
[알고리즘 문제] 백준7576 - 토마토 (0) | 2019.08.30 |