알고리즘(백준 등) 공부
SWEA 12369. 일련번호 붙이기
posite
2026. 5. 22. 11:38
문자열 순서로 정렬된 문자열 집합의 문자를 사용하여 길이 1부터 문자열을 만들 때, n번째 문자열을 찾는 문제이다.
n이 long 범위 이내이기 때문에 n을 문자열 집합의 길이의 진법으로 표현하여 문자열 집합의 위치에 해당하는 문자로 치환하여 원하는 문자열을 찾을 수 있게 된다. 다만 문자열 집합의 인덱스는 0부터 시작하므로 1이 아닌 0부터 시작하게 하기 위해 모듈로 연산 전에 n에 1을 빼주어야 한다.
String set = st.nextToken();
int length = set.length();
long n = Long.parseLong(st.nextToken());
StringBuilder result = new StringBuilder();
while (n > 0) {
n--;
int remainder = (int) (n % length);
result.append(set.charAt(remainder));
n /= length;
}
sb.append(result.reverse().toString()).append('\n');
결과 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int tc=1; tc<=T; tc++) {
sb.append('#').append(tc).append(' ');
StringTokenizer st = new StringTokenizer(br.readLine());
String set = st.nextToken();
int length = set.length();
long n = Long.parseLong(st.nextToken());
StringBuilder result = new StringBuilder();
while (n > 0) {
n--;
int remainder = (int) (n % length);
result.append(set.charAt(remainder));
n /= length;
}
sb.append(result.reverse().toString()).append('\n');
}
br.close();
System.out.print(sb);
}
}