본문 바로가기
Problem Solving/카카오 블라인드 기출

2018 - [1차] 다트 게임

by Libi 2021. 8. 7.
반응형

https://programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

[ 문제풀이 ]

문자열을 탐색하면서 주어진 조건대로 구현해주면 되는 문제이다. 주어진 문자열에서 3가지 영역을 잘 추출할 수 있다면 쉽게 해결할 수 있다.

class Solution {
    public int solution(String dartResult) {
        int answer = 0, beforeScore = 0;
        
        for (int i = 0; i < dartResult.length(); ) {
            int j, value = 0;
            for (j = i+1; j < dartResult.length(); ++j) {
                //현재 문자가 정수가 아니라면
                if (!Character.isDigit(dartResult.charAt(j))) {
                    //(i~j-1)까지의 문자열을 정수로 변환
                    value = Integer.parseInt(dartResult.substring(i, j));
                    
                    //다음 문자가 Double, Triple인 경우 처리
                    if (dartResult.charAt(j) == 'D') {
                        value = getScore(2, value);
                    } else if (dartResult.charAt(j) == 'T') {
                        value = getScore(3, value);
                    }
                    break;
                }
            }
            
            //다음 문자가 범위를 벗어나면
            if (++j >= dartResult.length()) {
            	answer += value;
            	break;
            }
            
            //다음 문자가 '*' 또는 '#'인 경우
            if (!Character.isDigit(dartResult.charAt(j))) {
                if (dartResult.charAt(j) == '*') {
                    value *= 2;
                    answer += beforeScore + value;
                } else if (dartResult.charAt(j) == '#') {
                    value *= -1;
                    answer += value;
                }
                ++j;
            } else {
            	answer += value;
            }
            
            i = j; 
            beforeScore = value; //이전 점수를 변경
        }
        
        return answer;
    }
    
    public int getScore(int n, int score) {
        if (n == 1) return score;
        return score * getScore(n - 1, score);
    }
}

 

 

반응형

'Problem Solving > 카카오 블라인드 기출' 카테고리의 다른 글

2018 - [3차] 압축  (0) 2021.08.07
2018 - [3차] 방금그곡  (0) 2021.08.07
2018 - [1차] 비밀지도  (0) 2021.08.07
2018 - [1차] 캐시  (0) 2021.08.07
2018 - [1차] 프렌즈4블록  (0) 2021.08.07

댓글