공부하는 스누피

[JAVA] 다트 게임 - StringBuffer 본문

Algorithms/코딩테스트 문제풀이

[JAVA] 다트 게임 - StringBuffer

커피맛스누피 2020. 7. 26. 01:38

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

 

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

 

programmers.co.kr

 

생각과정

- 주어진 문자열에서 한 문자씩 읽어서 숫자인지 아닌지 확인한다.

- 숫자를 char 단위로 받으므로 받을 때 버퍼에 append한다.

- S, D, T 문자를 받을 경우 숫자 입력이 종료되었으니 버퍼를 비우고 점수를 배열에 저장한다.

- 저장 위치는 index로, 점수가 새로 저장될 때마다 증가한다.

- *, # 문자를 받을 경우 index-1위치에 해당하는 점수를 갱신한다.

- * 문자는 이전 점수에게도 영향을 미치니 index가 0이 아닐 때만 index-2 위치를 갱신해준다.

구현

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int []arr = new int[3];
        StringBuffer numString = new StringBuffer();
        int index = 0;
        //문자열 순회하며 체크
        for(int i=0;i<dartResult.length();i++){
            char c = dartResult.charAt(i);
            if(Character.isDigit(c) || c == '-'){
                numString.append(c);
            }
            else{
                if(c=='S' || c=='D' || c=='T'){
                    int num = Integer.parseInt(numString.toString());
                    if(c == 'D')
                        num = (int)Math.pow(num, 2);
                    else if(c == 'T')
                        num = (int)Math.pow(num, 3);
                    arr[index] = num; 
                    index+=1;
                    numString.setLength(0);
                }
                else{
                    if(c == '*'){
                        arr[index-1] *= 2;
                        if(index-1 > 0){
                            arr[index-2] *= 2;
                        }
                    }
                    else if(c == '#'){
                        arr[index-1]*=-1;
                    }
                }
                
                
            }
        }
        for(int i=0;i<3;i++){
            //System.out.println(arr[i]);
            answer += arr[i];
        }
        return answer;
    }
}

 

결과

level 1 문제였다.

 

Character.isDigit(char)

문자가 숫자인지 판별해서 true 또는 false를 반환한다.

 

Math.pow(number, power)

거듭제곱을 구하는 메소드이다. double을 반환한다.

 

StringBuffer.setLength()

 StringBuffer 객체의 length 프로퍼티를 수정한다. 이때 0으로 설정하면 객체를 간편하게 초기화 시킬 수 있다.

 

참고

https://jamesdreaming.tistory.com/157

 

[ 자바 코딩 ] Java Character - isDigit() 함수

■ Java Character - Character.isDigit() 함수 isDigit() 함수는 명시된 char 값이 숫자 인지 여부를 판단하여 true 또는 false 값으로 리턴 합니다. 앞서 포스팅한 siLetter() 함수와 반대 기능을 한다고 생각..

jamesdreaming.tistory.com

https://coding-factory.tistory.com/531

 

[Java] 자바 거듭 제곱 구하기 Math.pow()

자바에서 특정값의 제곱을 구하려면 java.lang.Math 클래스의 pow()메소드를 사용하면 됩니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있습니다. Math 클래스가 제공하는

coding-factory.tistory.com

https://blog.outsider.ne.kr/265

 

StringBuffer 객체 초기화하기 :: Outsider's Dev Story

문자열을 만들때는 보통 StringBuffer를 사용한다. StringBuilder인가도 있지만 사용해 본적도 없고 StringBuffer대신 쓸 이유는 아직 잘 모르겠다. 하지만 문자열을 만드는데는 단연코 String으로 +로 이어��

blog.outsider.ne.kr

 

Comments