뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (202)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (27)
      • Spring (17)
      • 데이터베이스 (7)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

[JAVA] 프로그래머스 - 다트 게임 LV1
Algorithm & Data Structure/문제 풀이

[JAVA] 프로그래머스 - 다트 게임 LV1

2022. 4. 1. 15:09
반응형

문제는 아래 링크를 통해 확인해주세요.

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

 

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

 

programmers.co.kr

 

조건 및 설계

  • 점수 : 0~10
  • 보너스 : S(1), D(2), T(3)
  • 옵션 : 옵션은 존재하지 않을 수도 있다.
    • * : 위치 기준 i와 i-1를 2배 한다. (만약 i=0이라면 i만 2배한다.)
      • *와 * 중첩 : 위와 마찬가지로 진행하면 된다. (결국 i-1의 score는 4배가 된 셈이다.)
      • #와 * 중첩 : i-1에 대해서 -1배가 적용된 값에 그대로 2배를 적용한다. (-2배)
    • # : 위치 기준 i에 -1배 한다.(즉 마이너스)

내 생각

  • 길이 3인 int형 배열 score에 값을 넣어주는데..
  • input으로 들어오는 dartResult에서 점수 - 보너스 - 옵션 순으로 하나씩 검사하면서 값에 변환을 주면 된다.
  • 결국 score 배열 만큼 도는 반복문 내에서 dartResult는 index를 이용해서 하나씩 증가시켜주며 방문한다.
  • 숫자 : 10이 나오는 경우를 따로 처리해줘야 한다.
    • dartResult의 다음 인덱스가 0이면 score[i]에 10을 넣어준다.
    • 10인 경우, dartResult의 index를 ++해줘야한다. 
  • 보너스 : D, T인 경우 score[i] 값을 꺼내서 제곱, 세제곱해준다.
  • 옵션 : 나오지 않을 수 있는 경우이기 때문에, 옵션인지 숫자인지 체크하고 옵션이면 로직을 진행한다.
    • *이면, (i가 0보다 큰경우에만 이전 index와) 현재 index를 2배 한다.
      • 이전 다트 score에서 옵션이 #이거나 *이어서 중첩인 경우를 문제에는 말해놨는데 해당 풀이 방식에서는 따로 고려할 것은 없다.
    • #이면, -1을 곱한다.
  • 마지막에 score 배열들을 모두 합한다.

추가로, 이번 문제는 모든 입출력 예제를 읽으며 이해해본 후에 문제를 푸는게 더 빨리 풀 수 있을 것 같다. (본인은 그러지 않아서 그때그때 조건을 고려하면서 시간이 추가로 걸렸다)

입출력 예제

코드

피드백을 받지 않은 코드이기 때문에 완벽한 코드는 아닐 수 있습니다.

public class prg_다트게임 {
    public int solution(String dartResult) {
        int ans = 0;
        int[] score = new int[3];   // 점수 매길 배열
        int dartIdx = 0;
        // 1. dartResult 하나씩 방문하면서 점수[]에 변환을 준다.
        for (int i=0; i< score.length; i++) {
            // 2. 숫자
            int digit = Integer.parseInt(String.valueOf(dartResult.charAt(dartIdx)));
            if (digit == 1 && dartResult.charAt(dartIdx+1) == '0') {
                score[i] = 10;
                dartIdx++;
            }
            else score[i] = digit; // 0~9
            // 3. 보너스
            char bonus = dartResult.charAt(++dartIdx);
            if (bonus == 'D') score[i] = pow(score[i], 2);
            else if (bonus == 'T') score[i] = pow(score[i], 3);

            if (dartIdx >= dartResult.length()-1) break;    // 끝난 경우 종료.
            // 4. 옵션
            char optionOrScore = dartResult.charAt(++dartIdx);
            if (!Character.isDigit(optionOrScore)) {    // 옵션일 경우
                if (optionOrScore == '*') {
                    score[i] *= 2;
                    if (i>0) score[i-1] *= 2;
                } else { // '#'
                    score[i] *= (-1);
                }
                dartIdx++;  // index 이동(숫자로)
            }
        }
        // 5. 합
        for (int n: score) ans+= n;
        return ans;
    }
    private int pow(int i, int n) {
        return (int)Math.pow(i, n);
    }

    public static void main(String[] args) {
        prg_다트게임 t = new prg_다트게임();
        int solution = t.solution("1S*2T*3S");
        System.out.println(solution);
    }
}

 

 

피드백과 댓글은 환영입니다.
반응형
저작자표시 (새창열림)

'Algorithm & Data Structure > 문제 풀이' 카테고리의 다른 글

[Concept/Algorithm] 이분/이진 탐색 (Binary Search)  (0) 2022.04.17
[JAVA] 프로그래머스 - 행렬 테두리 회전하기 LV2  (0) 2022.04.01
[JAVA] 프로그래머스 - 전화번호 목록 LV2  (0) 2022.01.26
[JAVA] 프로그래머스 - 완주하지 못한 선수 LV1  (0) 2022.01.24
[프로그래머스] SQL 문제  (0) 2021.12.13
    'Algorithm & Data Structure/문제 풀이' 카테고리의 다른 글
    • [Concept/Algorithm] 이분/이진 탐색 (Binary Search)
    • [JAVA] 프로그래머스 - 행렬 테두리 회전하기 LV2
    • [JAVA] 프로그래머스 - 전화번호 목록 LV2
    • [JAVA] 프로그래머스 - 완주하지 못한 선수 LV1
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바