[프로그래머스] 2018 KAKAO BLIND RECRUITMENT 1차 다트게임

mango·2023년 9월 9일
0

프로그래머스 level 1

목록 보기
15/17

* Things I learnt

1. 자바 문자열 정규식

한칸씩읽을건데 10을 어떻게 처리하지?
'*,#'은 있을수도 없을수도 있는데 어떻게 처리하지?
=> 답은 문자열 정규식이었다.

Pattern, Matcher는 사용하기전 import 따로 필수

  • import java.util.regex.Pattern;
  • import java.util.regex.Matcher;

☆바로가기 - 벨로그 자바 Pattern Matcher 정리 글☆

2. String 값이 있는지 없는지 null 판별하는 법

  • str.isEmpty()
str1 = "";
str2 = null;
str3 = " ";

str1.isEmpty(); // ""은 true
str2.isEmpty(); // null은 true
str3.isEmpty(); // " "은 false

3. Math 함수는 import 필수

  • import java.lang.Math;

사용할 때도, Math.pow(10, 2); 이런식으로 꺼내서 사용해야함

4. switch문 문법

쉬운거지만 확실하게 알아놓기

switch(){
	case 'a': 	....;
    			break;
	case 'b': 	....;
    			break;
    default: 	break;
}

모두 소문자인 것 기억!!!

* 알고리즘

  1. 정규식을 정의해서 dartResult 문자열에서 패턴에 맞게 잘라줌
  2. 자른 문자열에서 숫자, SDT, *#에 맞게 계산 후, array에 넣기
  3. array 값 읽으면서 계산

* 자바코드

import java.util.*;
import java.lang.Math;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int index = 0;
        int[] dartAnswer = {};
        
        Pattern p = Pattern.compile("([0-9]+)([SDT])([*#]?)");
        Matcher m = p.matcher(dartResult);  
        
        dartAnswer = new int[m.groupCount()];
        while(m.find()){
            int num = Integer.valueOf(m.group(1));
            switch(m.group(2).charAt(0)){
                case 'S':   num = (int)Math.pow(num, 1);
                            break;
                case 'D':   num = (int)Math.pow(num, 2);
                            break;
                case 'T':   num = (int)Math.pow(num, 3);
                            break;
                default:    break;
            }
            dartAnswer[index] = num;
            // System.out.println("@"+m.group(3)+"@");
            if(m.group(3).isEmpty() == false){  //string이 null 인지 판별하는 함수
                switch(m.group(3).charAt(0)){
                    case '*':   if(index > 0){
                                    dartAnswer[index-1] *= 2;
                                    dartAnswer[index] *= 2;
                                }
                                else
                                    dartAnswer[index] *= 2;                                
                                break;
                    case '#':   dartAnswer[index] *= -1;                                
                                break;
                    default:    break;
                }
            }
            index++;
        }
        
        for(int i : dartAnswer){
            answer += i;
        }
            
        return answer;
    }
}
profile
앎의 즐거움을 아는 나는 mango ♪

0개의 댓글