https://school.programmers.co.kr/learn/courses/30/lessons/17687#
이 문제는 n에 따라 n진수의 숫자를 만들어내면 해결할 수 있다.
이때 n은 2 ~ 16의 값이 주어지며 2, 8, 16진수 뿐만 아니라 11, 12, ... 진수도 있다는 것을 잊으면 안된다.
따라서 11진수 이상의 값을 표현하기 위해 code배열을 만들어 냈으며 10이상부터는 'A', 'B', ... 으로 표현한다는 것을 통해 대문자를 배열의 요소로 집어 넣었다.
number와 n의 나머지 값이 9보다 클 경우 배열의 요소를 통해 진수를 만들어 냈다.
진수를 만든 이후 p 번째 말할 값을 구하기 위해 now 변수를 만들어 냈다.
now가 p와 같을 경우 현재 말할 값이기 때문에 전환한 진수의 문자를 answer 변수에 더한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
char code[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
string calc(int number, int n){
if(number < 1)
return "0";
string temp = "";
while(number >= n){
int calcNum = number % n;
if(calcNum > 9)
temp += code[calcNum];
else
temp += to_string(calcNum);
number /= n;
}
if(number > 0){
if(number > 9)
temp += code[number];
else
temp += to_string(number);
}
return temp;
}
string solution(int n, int t, int m, int p) {
string answer = "";
int number = 0;
int now = 1;
while(true){
if(answer.length() == t)
break;
string calcNum = calc(number, n);
while(!calcNum.empty()){
if(answer.length() == t)
break;
char c = calcNum.back();
calcNum.pop_back();
if(now == p)
answer += c;
now++;
if(now > m)
now = 1;
}
number++;
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 2] k진수에서 소수 개수 구하기 (0) | 2024.08.13 |
---|---|
[Lv 2] 방문 길이 (0) | 2024.08.10 |
[Lv 2] 할인 행사 (0) | 2024.08.05 |
[Lv 2] 스킬트리 (0) | 2024.08.05 |
[Lv 2] 튜플 (0) | 2024.08.02 |