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

홈런볼·2023년 6월 29일
0

프로그래머스

목록 보기
2/36

문제링크

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

문제접근

  • 대략적인 점수 연산의 규칙을 파악했을 땐 알파벳 S,D,T => 1,2,3 제곱
  • * : 지금 점수, 이전 점수에 2배 곱
  • # : 지금 점수에 -1배 곱 / * 연산 있으면 -2배 곱

로직

  1. 입력받은 문자열을 정규식을 이용하여 숫자 부분과 연산부분을 배열로 추출
  2. 배열을 뒤부터 돌면서 제곱 값을 구해줌
  3. * 문자가 포함되어 있을 땐 제곱값에 2 해주고, 앞에 값도 2 해줘야 하므로 cnt로 세줌
  4. # 문자가 포함되어 있을 땐 제곱값에 -1 곱해줌
  5. cnt 가 1일땐(뒤에 가 있는 경우) 제곱값에 2, 초기화
  6. answer 변수에 연산된 값 더해줌

문제풀이

import java.util.Arrays;

class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        String[] num = dartResult.split("\\D+");
        String[] operate = dartResult.split("[0-9]+");

        double before = 0;
        int cnt=0;

        for(int i=operate.length-1;i>=1;i--){
            int score = Integer.parseInt(num[i-1]);
            int pow = 0;

            if(operate[i].contains("S")) pow = 1;
            if(operate[i].contains("D")) pow = 2;
            if(operate[i].contains("T")) pow = 3;

            before = Math.pow(score,pow);

            if(cnt == 1) {
                before*=2;
                cnt=0;
            }
            if(operate[i].contains("*")) {
                cnt++;
                before *= 2;
            }
            if(operate[i].contains("#")) before *= -1;

            answer+=before;
        }

        return answer;
    }
}

정확성 테스트


0개의 댓글