본문 바로가기
#알고리즘 [Algorithm]/Problem

[프로그래머스 - 구현] 다트 게임 (for kakao)

by cy_mos 2019. 7. 31.
반응형

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


📄 [구현] 다트 게임 C++ Source Code

#include <cmath>
#include <deque>
#include <string>
#include <vector>
#include <numeric>
#include <iostream>
using namespace std;

#define MAX_N 3

const int findDigit(int index, const string dartResult) {

	deque<char> digit;

	while (--index >= 0) {
		if (dartResult[index] < 48 || dartResult[index] > 57) { break; }
		digit.push_front(dartResult[index]);
	}

	const string value = string(digit.begin(), digit.end());
	return std::stoi(value);
}

int solution(string dartResult) {

	/* 
		옵션으로 스타상(*), 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 
		아차상(#) 당첨 시 해당 점수는 마이너스된다. 
	*/
	vector<int> answer;
	
	// 점수는 0에서 10 사이의 정수이다. 1D 2S# 10S
	vector<int> alphabat_pos;
	for (int index = 0; index < dartResult.size(); index++) {
		// 문자의 아스키 값을 통하여 영어 대문자를 확인하여 구분한다.
		if (dartResult[index] >= 65 && dartResult[index] <= 90) {
			const int digit = findDigit(index, dartResult);
			answer.push_back(digit);

			alphabat_pos.push_back(index);
		}
	}

	for (int index = 0; index < MAX_N; index++) {
		// 영어 대문자를 S, D, T 단위로 구분하여 지정 된 수를 제곱하여 계산한다.
		const char letter = dartResult[alphabat_pos[index]];
		switch (letter) {
			case ('D'): {
				answer[index] = std::pow(answer[index], 2);
				break;
			}
			case ('T'): {
				answer[index] = std::pow(answer[index], 3);
				break;
			}
		}
	}

	// 특수문자 처리 구간
	for (int index = 0; index < MAX_N; index++) {
		auto begin = dartResult.begin() + alphabat_pos[index];

		if (begin + 1 == dartResult.end()) { break; }

		const auto nextBegin = begin + 1;
		if (*nextBegin == '*') {
			answer[index] *= 2;
			
			if (index > 0) { answer[index - 1] *= 2; }
		}
		else if (*nextBegin == '#') { 
			answer[index] *= -1; 
		}
	}

 	return std::accumulate(answer.begin(), answer.end(), 0);
}

🚀 REFERENCE

 

코딩테스트 연습 - [1차] 다트 게임 | 프로그래머스

 

programmers.co.kr

 

ChangYeop-Yang/Study-Algorithm

수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다. - ChangYeop-Yang/Study-Algorithm

github.com

 

반응형

댓글