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 |