Make Unreal REAL.
article thumbnail
Level 1. [1차] 다트 게임

 

 

문자열을 문자로 순회하고 isdigit() 함수를 활용했다.

 

#include <iostream>
#include <vector>
#include <cctype>
#include <cmath>

using namespace std;

int solution(string dartResult)
{
    char prev = '\0';
    vector<int> points;

    for (char c : dartResult)
    {
        if (isdigit(c))
        {
            if (isdigit(prev))
                points.back() = points.back() * 10 + (c - '0');
            else
                points.emplace_back(c - '0');
        }
        else if (c == '#')
        {
            points.back() *= -1;
        }
        else if (c == '*')
        {
            points.back() *= 2;

            if (2 <= points.size())
                points[points.size() - 2] *= 2;
        }
        else
        {
            int exp = 1;

            switch (c)
            {
            case 'S': exp = 1; break;
            case 'D': exp = 2; break;
            case 'T': exp = 3; break;
            default: break;
            }

            points.back() = pow(points.back(), exp);
        }

        prev = c;
    }

    return points[0] + points[1] + points[2];
}

 

다른 사람의 풀이를 보니 istringstream을 이런 식으로도 활용할 수 있다는 것을 알았다.

 

istringstream을 get(), unget()하지 않고 peek()을 사용해도 될 것 같다.

 

#include <iostream>
#include <sstream>
#include <cmath>

using namespace std;

int solution(string dartResult)
{
    int points[4] = {0};
    istringstream iss(dartResult);

    for (int i = 1; i <= 3; i++)
    {
        int point;

        iss >> point;

        switch (iss.get())
        {
        case 'S': points[i] = pow(point, 1); break;
        case 'D': points[i] = pow(point, 2); break;
        case 'T': points[i] = pow(point, 3); break;
        default: break;
        }

        switch (iss.get())
        {
        case '*': points[i - 1] *= 2; points[i] *= 2; break;
        case '#': points[i] *= -1; break;
        default: iss.unget(); break;
        }
    }

    return points[1] + points[2] + points[3];
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 1. 크레인 인형뽑기 게임  (0) 2023.03.04
Level 1. 키패드 누르기  (0) 2023.03.03
Level 1. 체육복  (0) 2023.03.01
Level 1. 문자열 나누기  (0) 2023.02.26
Level 1. 기사단원의 무기  (0) 2023.02.25
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그