[프로그래머스] 다트게임
Algorithm 2023. 1. 20. 23:51https://school.programmers.co.kr/learn/courses/30/lessons/17682
#include <iostream>
#include <stack>
#include <algorithm>
#include <vector>
using namespace std;
int solution(string dartResult) {
int answer = 0;
reverse(dartResult.begin(), dartResult.end());
//cout << str << '\n';
stack<char> stack;
for(int i = 0; i<dartResult.length(); i++){
stack.push(dartResult[i]);
}
string num = "";
vector<int> result;
int index = 0;
while(!stack.empty()){
//cout << stack.top() << '\n';
//stack.pop();
char c = stack.top();
if(c >= '0' && c <= '9'){
//숫자
num += c;
}
else if(c == 'S')
{
result.push_back(stoi(num));
num = "";
index++;
}else if(c == 'D')
{
int n = stoi(num);
result.push_back(n * n);
num = "";
index++;
}
else if(c == 'T')
{
int n = stoi(num);
result.push_back(n * n * n);
num = "";
index++;
}else if(c == '*')
{
if(index == 1) result[index-1] *= 2;
else {
result[index - 1] *=2;
result[index - 2] *=2;
}
}else if(c == '#')
{
result[index -1] *= -1;
}
stack.pop();
}
for(int x:result){
answer += x;
}
//cout << answer << '\n';
return answer;
}
int main()
{
string str = "1D2S#10S";
int result = solution(str);
cout << result << '\n';
return 0;
}
c#
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Programmers
{
class Program
{
static void Main()
{
string[] testcase =
{
"1S2D*3T",
"1D2S#10S",
"1D2S0T",
"1S*2T*3S",
"1D#2S*3S",
"1T2D3D#",
"1D2S3T*"
};
var sol = new Solution();
//Console.WriteLine(testcase.Length);
for (int i = 0; i < testcase.Length; i++)
{
var dartResult = testcase[i];
var result = sol.solution(dartResult);
Console.WriteLine(result);
}
}
}
class Solution
{
public int solution(string dartResult)
{
Console.WriteLine(dartResult);
int answer = 0;
var str = new string(dartResult.Reverse().ToArray());
//Console.WriteLine(str);
Stack<char> stack = new Stack<char>();
for(int i =0 ; i<str.Length; i++)
stack.Push(str[i]);
string num = "";
List<int> result = new List<int>();
int idx = 0;
while (stack.Count > 0)
{
var c = stack.Peek();
//숫자 판별
if (c >= '0' && c <= '9')
{
num += c; //숫자가 한개 이상일 경우 결합
}else if (c == 'S')
{
result.Add(int.Parse(num));
num = "";
idx++; //리스트의 다음 인덱스
}else if (c == 'D')
{
int n = int.Parse(num);
result.Add(n * n);
num = "";
idx++;
}
else if (c == 'T')
{
int n = int.Parse(num);
result.Add(n * n * n);
num = "";
idx++;
}
else if (c == '*')
{
//3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
if (idx == 1) //처음 등장시
result[idx - 1] *= 2; //마지막 결과 값을 2배
else
{
//처음이 아니라면 2번째 3번째 임
var last = result.Count - 1;
//Console.WriteLine(idx);
result[last-1] *= 2;
result[last] *= 2;
}
}else if (c == '#')
{
result[idx - 1] *= -1; //음수로 만들기
}
stack.Pop();
}
foreach (var x in result)
answer += x;
return answer;
}
}
}
'Algorithm' 카테고리의 다른 글
[BOJ] 2684 동전 게임 (0) | 2023.01.21 |
---|---|
[프로그래머스] 전화번호 목록 (0) | 2023.01.20 |
[BOJ] 21921 블로그 (0) | 2023.01.20 |
[BOJ] 1940 주몽 (0) | 2023.01.20 |
[BOJ] 1254 팰린드롬 만들기 (0) | 2023.01.20 |