알고리즘/프로그래머스 1단계
프로그래머스 - [1차] 다트 게임 - C++
게임만드는학생
2024. 7. 25. 13:32
https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
using namespace std;
int convert(char c,int n)
{
if(c=='S')
return n;
else if(c=='D')
return n*n;
else
return n*n*n;
}
int solution(string dartResult) {
int answer = 0;
int prev=0,cur=0;
string s;
for(int i=0;i<dartResult.length();i++)
{
if(dartResult[i]=='S'||dartResult[i]=='D'||dartResult[i]=='T')
{
answer+=prev;
prev=cur;
cur = stoi(s);
cur = convert(dartResult[i],cur);
s="";
}
else if(dartResult[i]>='0'&&dartResult[i]<='9')
{
s+=dartResult[i];
}
else if(dartResult[i]=='*')
{
prev*=2;
cur*=2;
}
else if(dartResult[i]=='#')
{
cur*=-1;
}
}
answer+=prev+cur;
return answer;
}
다트에서 얻은 점수가 문자열로 주어진다. 이를 분석해서 총점이 얼마인지 리턴하는 문제이다.
숫자는 0~9, 특별점수는 *, # 이 있다.
* = 이전점수와 현재점수에 곱하기 2, # = 현재점수를 마이너스로
숫자뒤에 붙는 S , D , T 는 각각 1제곱, 2제곱, 3제곱이다.
따라서 문자열을 하나씩 보며 숫자면 문자열에 숫자를 더해간다. 10을 위함이다.
S,D,T 가 나오면 문자열을 숫자로 바꾸고 각각에 해당하는 제곱을 한 후에 cur 변수에 저장한다.
prev와 cur 변수는 특별점수의 영향권에 있는 점수들이다.
따라서 S,D,T가 나왔을 때 기존의 cur는 prev가 되며 prev는 영향권에서 벗어나기 때문에 answer에 저장한다.
그리고 제곱한 수를 cur에 저장한다. 제곱은 convert 함수에서 진행한다.
cur,prev를 따로 저장하고있기 때문에 * 이 나오면 두 수에 *2를 , #이 나오면 cur에 -1을 곱하면 된다.
for문이 종료되면 prev와 cur을 answer 더해준다.