[프로그래머스 Lv1.] 17682번 [1차] 다트 게임 (JAVA)

2025. 1. 7. 08:57·Coding Test/프로그래머스[JAVA]

문제 설명

카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~

 

카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.

갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.

  1. 다트 게임은 총 3번의 기회로 구성된다.
  2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
  3. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수 , 점수 , 점수 )으로 계산된다.
  4. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
  5. 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)
  6. 스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)
  7. 스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
  8. Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
  9. 스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.

0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.

입력 형식

"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.

예) 1S2D*3T

  • 점수는 0에서 10 사이의 정수이다.
  • 보너스는 S, D, T 중 하나이다.
  • 옵션은 *이나 # 중 하나이며, 없을 수도 있다.

출력 형식

3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.

예) 37

입출력 예제

예제  dartResult  answer  설명
1 1S2D*3T 37 11 * 2 + 22 * 2 + 33
2 1D2S#10S 9 12 + 21 * (-1) + 101
3 1D2S0T 3 12 + 21 + 03
4 1S*2T*3S 23 11 * 2 * 2 + 23 * 2 + 31
5 1D#2S*3S 5 12 * (-1) * 2 + 21 * 2 + 31
6 1T2D3D# -4 13 + 22 + 32 * (-1)
7 1D2S3T* 59 12 + 21 * 2 + 33 * 2

풀이

class Solution {
    public int solution(String dartResult) {
        int[] score = new int[3];
        char[] str = dartResult.toCharArray();
        
        int idx = -1;
        for(int i=0; i<str.length; i++) {
            if(str[i] == '1' && str[i + 1] == '0') {
                idx++;
                score[idx] = 10;
                i++;
            } else if(str[i] >= '0' && str[i] <= '9') {
                idx++;
                score[idx] = Integer.parseInt(String.valueOf(str[i]));
            }
            
            if(str[i] == 'D') score[idx] = (int) Math.pow(score[idx], 2); 
            else if(str[i] == 'T') score[idx] = (int) Math.pow(score[idx], 3);
            else if(str[i] == '#') score[idx] *= -1;
            else if(str[i] == '*') {
                score[idx] *= 2;
                if(idx > 0) score[idx - 1] *= 2;
            } 
        }
        return score[0] + score[1] + score[2];
    }
}

 

저작자표시 비영리 변경금지 (새창열림)

'Coding Test > 프로그래머스[JAVA]' 카테고리의 다른 글

[프로그래머스 Lv1.] 155652번 둘만의 암호 (JAVA)  (0) 2025.04.24
[프로그래머스 Lv1.] 77484번 로또의 최고 순위와 최저 순위 (JAVA)  (0) 2025.01.08
[프로그래머스 Lv1.] 42840번 모의고사 (JAVA)  (0) 2024.12.12
[프로그래머스 Lv1.] 136798번 기사단원의 무기 (JAVA)  (0) 2024.12.10
[프로그래머스 Lv1.] 1845번 폰켓몬 (JAVA)  (0) 2024.12.10
'Coding Test/프로그래머스[JAVA]' 카테고리의 다른 글
  • [프로그래머스 Lv1.] 155652번 둘만의 암호 (JAVA)
  • [프로그래머스 Lv1.] 77484번 로또의 최고 순위와 최저 순위 (JAVA)
  • [프로그래머스 Lv1.] 42840번 모의고사 (JAVA)
  • [프로그래머스 Lv1.] 136798번 기사단원의 무기 (JAVA)
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Oracle
    플러터
    백준
    스프링
    springboot
    python
    spring
    Java
    CS지식
    스프링부트
    DB
    programmers
    backjoon
    리눅스
    프로그래머스
    baekjoon
    자바
    데이터베이스
    pcce 기출문제
    postgresql
    CS
    Linux
    스프링 부트 쇼핑몰 프로젝트 with JPA
    Spring Security
    시큐리티
    JPA
    Flutter
    리눅스마스터
    데이터
    리눅스마스터 1급
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[프로그래머스 Lv1.] 17682번 [1차] 다트 게임 (JAVA)
상단으로

티스토리툴바