본문 바로가기
Algorithm/문제 풀이 (Problem Solving)

[C++, 문자열] 프로그래머스 다트게임

by matters_ 2022. 3. 31.

문제

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

 

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

 

programmers.co.kr

해답

stringsteam을 잘 활용하니 parsing을 쉽게 할 수 있었다.

#include <string>
#include <sstream>
#include <iostream>
#include <cmath>

using namespace std;

int solution(string dartResult) {
	stringstream ss(dartResult);
	int answer = 0;
	int answerList[3] = { 0, };
	int strIdx = 0;
	
	for (int i = 0; i < 3; i++) {
		//parsing
		int score = 0;
		char bonus = 0, option = 0;

		ss >> score;
		bonus = ss.get();
		option = ss.get();

		if (option != '*' && option != '#')
			ss.unget();

		//score
		answerList[i] = score;

		//bouns
		switch (bonus)
		{
		case 'S': 
			break;
		case 'D':
			answerList[i] = pow(answerList[i], 2);
			break;
		case 'T':
			answerList[i] = pow(answerList[i], 3);
			break;
		}

		//option
		if (option == 0) {
			continue;
		}
		else if (option == '#') {
			answerList[i] *= -1;
		}
		else if (option == '*') {
			if (i == 0) {
				answerList[i] *= 2;
			}
			else {
				answerList[i] *= 2; answerList[i - 1] *= 2;
			}
		}
	}

	for (auto a : answerList)
		answer += a;

	return answer;
}

댓글