Make Unreal REAL.
article thumbnail
Level 2. [3차] n진수 게임

 

 

매번 수행해야 할 것, 문자열을 새로 할당할 때마다 수행해야 할 것, 자신의 차례일 때 수행해야 할 것을 구분하는 것이 주인 문제였다.

 

#include <iostream>
#include <deque>

using namespace std;

deque<char> to_base(int n, int num)
{
    deque<char> deq;

    const char numbers[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                            'A', 'B', 'C', 'D', 'E', 'F'};

    do
        deq.emplace_front(numbers[num % n]);
    while (num /= n);

    return deq;
}

string solution(int n, int t, int m, int p)
{
    int num = 0, cur = 0;
    string answer;
    deque<char> deq;
    
    p %= m;

    while (t)
    {
        if (deq.empty())
            deq = to_base(n, num++);

        if ((++cur % m) == p)
        {
            answer += deq.front();

            --t;
        }

        deq.pop_front();
    }

    return answer;
}

 

일일이 상황을 구분할 필요 없이, 미리 t x m 길이만큼 문자열을 만들어놓고 확인해도 된다.

 

#include <iostream>
#include <deque>

using namespace std;

string to_base(int n, int num)
{
    deque<char> deq;

    const char numbers[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                            'A', 'B', 'C', 'D', 'E', 'F'};

    do
        deq.emplace_front(numbers[num % n]);
    while (num /= n);

    return string(deq.begin(), deq.end());
}

string solution(int n, int t, int m, int p)
{
    string answer, temp;

    for (int num = 0; temp.size() <= t * m; ++num)
        temp += to_base(n, num);

    for (int i = 0; i < t; ++i)
        answer += temp[(m * i) + (p - 1)];

    return answer;
}

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

Level 2. [3차] 압축  (0) 2023.06.04
Level 2. k진수에서 소수 개수 구하기  (0) 2023.06.03
Level 2. 점프와 순간 이동  (0) 2023.06.01
Level 2. H-Index  (0) 2023.05.31
Level 2. 멀리 뛰기  (0) 2023.05.30
profile

Make Unreal REAL.

@diesuki4

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

검색 태그