[프로그래머스][ [1차] 다트게임 ]-Lv.1

호준·2022년 1월 9일
0

Algorithm

목록 보기
41/111
post-thumbnail

문제

문제링크

코드

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        int[] sum = new int[3]; // 3번의 다트 점수 배열
        int index=0;
        int number=0;
        for(int i=0; i<dartResult.length(); i++){
            int ch = dartResult.charAt(i);
            if('0'<= ch && ch<='9'){
                if(dartResult.charAt(i+1)=='0'){ //숫자 다음에 0이 오는거는 10밖에 없음
                    i++;
                    number = 10;
                }else{
                    number = ch - '0'; // int형으로 바꾸기
                }
            }
            if(ch=='S'){ //그대로
                sum[index++] = number;
            }else if(ch=='D'){ // 제곱
                sum[index++] = number*number;
            }else if(ch=='T'){ // 3제곱
                sum[index++] = number*number*number; 
            }else if(ch=='*'){ // 현재 점수와 그전 점수 *2
                sum[index-1] *=2;
                if(index-2 >=0){ //첫번째 점수 후에 나올 수도 있으니 인덱스 check
                    sum[index-2] *=2;
                }
            }else if(ch=='#'){ // #일때 현재 점수 -1곱하기
                sum[index-1] *= -1;
            }
        }
        for(int i : sum){ // sum의 모든 값들의 합 = 점수
            answer += i;
        }
        return answer;
    }
}

알고 넘어가기

이 문제 풀때에는 제곱수가 그렇게 크지 않아 number x number x number 이런식으로 했지만 더 큰 상황에서는 반복해서 쓰기에는 불편한다.
그 방법을 해결해 줄 수 있는 것이 Math.pow(숫자,제곱수)를 하면 된다.
ex) 3^3 = Math.pow(3,3) 이런식으로 하면된다.
<주의할 점 : 반환 타입은 int가 아니라 double이다.>

profile
도전하자

0개의 댓글