https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
구현 문제입니다. 문제의 설명에 따라 구현하면 되는데, 유의해야 할 점은 10이라는 숫자가 나올 수 있다는 것입니다.
먼저 isdigit 함수를 사용해 현재 문자가 숫자인지 판별한 후, 다음 문자까지 검사하여 10인지 아닌지 판별하여 num 변수에 저장합니다. 이 때, i++는 10의 경우 i+=3 이 되어야 하기 때문에 미리 처리 해줍니다.
S, D, T 경우에 따라 pow 함수를 사용하여 score 변수에 push_back 해줍니다.
현재 문자가 숫자가 아닐 경우는 현재 몇번째 게임에 해당하는지 알기 위한 변수 cnt를 사용해 *, # 설명에 따른 로직을 구현해줍니다.
#include <string>
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
vector<int> score;
int solution(string dartResult) {
int answer = 0;
/*
숫자 또는 대문자
점수 기록
*/
for (int i=0; i < dartResult.size(); ) {
if (isdigit(dartResult[i])) {
int num = 0;
// 10 처리
if (isdigit(dartResult[i+1])) {
num = 10;
i++;
}
else
num = (int)dartResult[i]-48;
if (dartResult[i+1] == 'S')
score.push_back(num);
else if (dartResult[i+1] == 'D')
score.push_back(pow(num, 2));
else
score.push_back(pow(num, 3));
i+=2;
}
else {
int cnt = score.size();
if (dartResult[i] == '*') {
if (cnt == 1) {
score[cnt-1] = score[cnt-1]*2;
}
else {
score[cnt-1] = score[cnt-1]*2;
score[cnt-2] = score[cnt-2]*2;
}
}
if (dartResult[i] == '#') {
score[cnt-1] = score[cnt-1] * -1;
}
i++;
}
}
for (auto i : score) {
answer += i;
// cout << i << endl;
}
return answer;
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[C++] 프로그래머스 [PCCP 기출문제] 1번 (0) | 2023.12.31 |
---|---|
[C++] 프로그래머스 덧칠하기 (0) | 2023.11.04 |
[C++] 프로그래머스 숫자 짝꿍 (0) | 2023.11.01 |
[C++] 프로그래머스 체육복 (0) | 2023.10.31 |
[C++] 프로그래머스 크레인 인형뽑기 게임 (0) | 2023.10.31 |