반갑습니다!

[프로그래머스] 다트 게임 본문

알고리즘 문제 풀이

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

김덜덜이 2020. 9. 8. 20:52
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

풀이

문제의 조건에 맞춰 구현해주면 되는 문제인데, 구현하기 상당히 까다로운 편이다. '*' 을 처리하기 위해서 이전 점수를 저장했고, 숫자 10을 따로 처리해주었다.

코드

C++

#include <string>
#include <cmath>
using namespace std;

int solution(string dartResult) {
    int prev = 0;
    int num = 0;
    int sum = 0;
    bool option = false;
    bool ten = false;
    for (int i = 0; i<dartResult.length(); i++) {
        if (ten) {
            ten = false;
            continue;
        }
        char tmp = dartResult[i];
        if ('0' <= tmp && tmp <= '9') {
            if (!option) { // 덧셈을 해주지 않은 경우 덧셈해준다
                prev = num;
                sum += num;
            }
            num = tmp - '0';
            option = false;
            if (tmp == '1' && dartResult[i + 1] == '0') {
                ten = true;
                num = 10;
            }
        }
        else if (tmp == 'D') num = pow(num, 2);
        else if (tmp == 'T') num = pow(num, 3);
        else if (tmp == '*') {
            num *= 2;
            sum += prev;
            prev = num;
            sum += num;
            option = true; // * 또는 # 일 때는 덧셈을 해주기 때문에 구분해준다
        }
        else if (tmp == '#') {
            num *= -1;
            prev = num;
            sum += num;
            option = true; // * 또는 # 일 때는 덧셈을 해주기 때문에 구분해준다
        }
    }
    if (!option) sum += num;
    return sum;
}

Java

class Solution {
    public int solution(String dartResult) {
        int sum = 0;
        int num = 0;
        int prev = 0;
        boolean isTen = false;
        boolean option = false;
        for (int i = 0; i < dartResult.length(); i++) {
            char c = dartResult.charAt(i);
            if (isTen) { // 10이면 건너뜀
                isTen = false;
                continue;
            }

            if ('0' <= c && c <= '9') {
                if (!option) { // 덧셈을 해주지 않은 경우 덧셈해준다
                    prev = num;
                    sum += num;
                }
                option = false;
                num = c - '0';
                if (c == '1' && dartResult.charAt(i + 1) == '0') { // 숫자 10인지 확인
                    num = 10;
                    isTen = true;
                }
            } else if (c == 'D') num = (int) Math.pow(num, 2);
            else if (c == 'T') num = (int) Math.pow(num, 3);
            else if (c == '*') {
                num *= 2;
                sum += prev;
                prev = num;
                sum += num;
                option = true; // * 또는 # 일 때는 덧셈을 해주기 때문에 구분해준다
            } else if (c == '#') {
                num *= -1;
                prev = num;
                sum += num;
                option = true; // * 또는 # 일 때는 덧셈을 해주기 때문에 구분해준다
            }
        }
        if (!option) sum += num;
        return sum;
    }
}