문제
https://school.programmers.co.kr/learn/courses/30/lessons/17687
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드(c++)
#include <string>
#include <vector>
using namespace std;
string getStr(int n, int t, int m) {
string result = "0";
int num = 1;
// 최대 m 명을 t 만큼만 반복하면됨
while(result.length() <= t*m) {
int tmp = num++;
string str = "";
// 0, 1, 2, ... 를 n 진수로 변환하면서 저장
while(tmp > 0) {
if(tmp % n < 10) str = to_string(tmp % n) + str;
else str = (char)('A' + (tmp % n - 10)) + str;
tmp /= n;
}
result += str;
}
return result;
}
string solution(int n, int t, int m, int p) {
string answer = "";
string str = getStr(n, t, m);
// t 번만 저장하면됨
for(int i=p-1; answer.length() < t; i += m) {
answer += str[i];
}
return answer;
}
코드(Java)
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder str = new StringBuilder();
// Integer.toString(숫자, n진수) 너무 좋아
for(int i=0; str.length() <= t * m; i++) {
str.append(Integer.toString(i, n));
}
StringBuilder answer = new StringBuilder();
String tmp = str.toString().toUpperCase();
// t 번 입력
for(int i = p-1; answer.length() < t; i += m) {
answer.append(tmp.charAt(i));
}
return answer.toString();
}
}
풀이
단순히 0부터 1씩 증가시키면서 n진수로 변환시킨다.
그 후에, p차례마다 읽히는 숫자를 반환한다.
반환해야하는 갯수인 t는 최대 1천, 참가하는 인원 수 m은 최대 1백으로 t*m 의 최대가 10만이다. 10만의 수는 충분히 작은 수이기에, 단순히 0부터 변환하는 과정을 포함시키는 과정을 수행했다.
자바의 Integer 클래스의 toString 메서드를 이용해서 특정 값을 바로 n진수로 변환한 결과를 받아낼 수 있다.