programming language/Algorithm

[프로그래머스 Level1] 다트게임

jellylucy 2021. 7. 22. 11:16

문제

입출력

문제 풀이 

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';//?