Programers : 다트게임 (stringstream)

김정욱·2021년 1월 20일
0

Algorithm - 문제

목록 보기
55/249

다트게임

  • 입력에 따라서 잘 구분하여 값을 처리해주면 어렵지 않게 풀리는 문제이다
  • 받은 문자가 숫자인지 확인하기 위해서는 isdigit()을 사용하면 된다.
  • 다른사람들의 해답속에서 stringstream을 알게되었음
    : 입력받은 문자열에서 공백(' ') 및 개행('\n')을 제외하고 나머지 자료들 중
      받는 데이터의 자료형으로 꺼내올 수 있도록 사용 가능!
#include <sstream>

int score;

	/* sstream 초기화 */
방법 1) stringstream ss("25T32S");
방법 2) string str = "25T32S";
       ss.str(str);

       /* 값 추출 */
ss >> score; // score가 int형이기 때문에 25를 가져온다.
ss.get(); // T를 가져온다.
ss >> score; // score가 int형이기 때문에 32를 가져온다.
ss.get(); // S를 가져온다.
ss.unget(); // S를 다시 ss에 넣는다

코드

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <numeric>
using namespace std;

int solution(string dartResult) {
    int answer = 0;
    vector<int> v(3,0);
    char ch;
    for(int i=0,idx=0;i<dartResult.length();i++)
    {
        ch = dartResult[i];
        if(isdigit(ch))
        {
            v[idx]=ch-'0';
            if(dartResult[i+1] == '0') {
                i++;
                v[idx]=10;
            }
        }else if(ch == 'S' || ch == 'D' || ch == 'T'){
            int mul = 1;
            if(ch == 'D') mul=2;
            if(ch == 'T') mul=3;
            v[idx] = pow(v[idx],mul);
        }else if(ch == '*'){
            if(idx != 0) v[idx-1] *= 2; 
            v[idx] *= 2;
        }else if(ch == '#'){
            v[idx] *= -1;
        }
        // idx 조건
        if(isdigit(dartResult[i+1])){
            idx++;
        }
    }
    return answer = accumulate(v.begin(), v.end(), 0);
}
profile
Developer & PhotoGrapher

0개의 댓글