문제
입출력
문제 풀이
1. string dartResult 를 쪼개서 조건문으로 숫자/알파벳/옵션을 비교한다
- #include <string> string STL 이용한다 : dartResult[i] , dartResult.size()
2. 숫자 비교하기
- dartResult[i]가 0~9사이일 때의 조건문 설정
- 숫자가 0-9일때 값 저장
- 숫자가 10일때 : [i+1]가 0이면 10을 저장한다. i++을 통해 10 다음의 문자열을 비교하기
3. 알파벳 비교하기
- dartResult[i]가 S D T 일 때의 조건문 설정
- D, T일 때 pow(score, 2)를 이용해 제곱수를 저장한다
- pow()는 #include <cmath>
4. 옵션 비교하기
- 알파벳 다음의 [i+1]을 비교하기
- *일때 : 전의 값 또한 2를 곱해야한다. prev 변수 이용.
숫자를 비교할 때 비교하기 전의 값을 prev변수에 저장해둔다.
prev값에 2를 곱하고, 현재 계산하는 score에도 2곱하기.
최종결과값 answer에 더해진 prev를 빼고 바뀐 prev값을 더한다.
- # 일 때 : 그냥 -해준다
5. 최종 answer 값 구하기
- 옵션을 비교한 뒤에 한 회의 값이 끝났으므로 answer에 score 값을 더해준다.
#include <string>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int prev = 0;
int score = 0;
//점수다음에 오는 알파벳을 보고
//숫자는
//세가지를 어떻게 나눠야 하지?
//처음에 숫자가 들어온다. 숫자를 따로 저장한다.
//숫자가 들어온뒤 알파벳을 판별한다
//for(string 끝까지)
//만약 1~9의 숫자라면,
//그다음의 값이 if 세가지에 따라 결과값 만들기
//그다음 만약 옵션 두가지라면
for(int i = 0;i<dartResult.size();i++){
if(dartResult[i] >= '0' && dartResult[i] <= '9'){
prev = score;//그 전의 한 회의 점수를 넣는다.
score = dartResult[i];
//만약 숫자라면 우선 점수에 숫자를 넣는다.
if(dartResult[i+1] == '0'){
score = 10;
i++;//!!!
}
else
score = dartResult[i] - '0';//?
}
if(dartResult[i] == 'S' || dartResult[i] == 'D' || dartResult[i] =='T'){
if(dartResult[i] == 'D') {
score = pow(score, 2);
}
else if(dartResult[i] == 'T') {
score = pow(score,3);
}
//숫자 다음으로 알파벳이 나오니까 score를 이용해서 넣는다.
if(dartResult[i+1] == '*'){
//전의 값도 두배를 해야한다.
score = 2*score;
answer -= prev;
prev = 2*prev;
answer += prev;
i++;
}
else if(dartResult[i+1] == '#'){
score = -score;
i++;
}
answer += score;
}
}
return answer;
}
공부할 점.
(1) string STL 숙지하기
- [i] 이용하기
- 숫자의 값을 더할 때
score = dartResult[i] - '0';//?
'programming language > Algorithm' 카테고리의 다른 글
[프로그래머스 Level1] 신규 아이디 추천 (0) | 2021.07.23 |
---|---|
[프로그래머스 Level1] 실패율 (0) | 2021.07.22 |
[카카오 신입 공채 1차 코딩 테스트 문제] 비밀지도 (0) | 2021.07.21 |
[프로그래머스 Level2] 프렌즈4블록 (0) | 2021.07.21 |
Stack & Queue (0) | 2021.02.02 |