본문 바로가기
휴지통/알고리즘 & 자료구조

다트 게임

by 신재권 2022. 11. 8.
package programmers;

import java.util.Arrays;

public class 다트게임 {

   public static int solution(String dartResult) {
      int[] points = new int[3];

      int cnt = 0;
      int tmp = 0;
      for (int i = 0; i < dartResult.length(); i++) {
         char c = dartResult.charAt(i);
         if (isPoint(c)) {
            points[cnt++] = pointCalc(c, Integer.parseInt(dartResult.substring(tmp, i)));
            tmp = i + 1;
         }
         tmp = getBonus(dartResult, points, cnt, tmp);
      }

      return Arrays.stream(points).sum();
   }

   private static int getBonus(String dartResult, int[] points, int cnt, int tmp) {
      if (tmp < dartResult.length()) {
         if (dartResult.charAt(tmp) == '*') {
            if (cnt < 2) {
               points[cnt - 1] *= 2;
            } else {
               points[cnt - 1] *= 2;
               points[cnt - 2] *= 2;
            }
            tmp++;
         } else if (dartResult.charAt(tmp) == '#') {
            points[cnt - 1] *= -1;
            tmp++;
         }
      }
      return tmp;
   }

   private static boolean isPoint(char c) {
      return c == 'S' || c == 'D' || c == 'T';
   }

   private static int pointCalc(char c, int point) {
      if (c == 'D') {
         point *= point;
      }
      if (c == 'T') {
         point *= point * point;
      }
      return point;
   }

   public static void main(String[] args) {
      System.out.println(solution("1S2D*3T"));
      System.out.println(solution("1D2S#10S"));
      System.out.println(solution("1D2S0T"));
      System.out.println(solution("1S*2T*3S"));
      System.out.println(solution("1D#2S*3S"));
      System.out.println(solution("1T2D3D#"));
      System.out.println(solution("1D2S3T*"));
   }
}

'휴지통 > 알고리즘 & 자료구조' 카테고리의 다른 글

콜라 문제  (0) 2022.11.10
체육복  (0) 2022.11.09
실패율  (0) 2022.11.06
소수 만들기  (0) 2022.11.04
소수찾기  (0) 2022.11.02