알고리즘/알문풀(백준, 프로그래머스, 코드트리)
[알고리즘] SWEA 1257 K번째 문자열 (JAVA)
ragabys
2023. 9. 18. 22:03
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18KWf6ItECFAZN
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문자열을 잘라서 저장해둔뒤, 정렬 후 출력만 하면 되는 문제로
substring이랑 treeset을 활용하면 쉽게 풀 수 있는 문제였다.
처음에 input 값을 받는 과정에서 main에서 T값을 입력 받은뒤
테스트 케이스마다 pre()함수를 불러 K와 input String 값을 입력받는 식으로 구현했는데,
K값에 input String값이 자꾸 들어가서 원인을 못 찾다가 pre() 함수 안에 T까지 입력받는 식으로 구현했더니
제대로 값이 입력되었다. 사실 해결하고 나서도 무슨 차이인지 아직까지는 모르겠다.
import java.io.*;
import java.util.*;
public class swea1257 {
static int x, T, K;
static String input, output;
static TreeSet<String> list;
static StringBuilder sb;
public static void showString() {
int i, j;
String str;
for (i = 0; i < input.length(); i++) {
for (j = i + 1; j <= input.length(); j++) {
str = input.substring(i, j);
list.add(str);
}
}
for (i = 0; i < K; i++) {
output = list.pollFirst();
}
if (output == null) {
output = "none";
}
sb.append("#").append(x).append(" ").append(output).append('\n');
}
public static void pre() throws IOException {
int i, j;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
T = Integer.parseInt(br.readLine());
for (x = 1; x <= T; x++) {
K = Integer.parseInt(br.readLine());
input = br.readLine();
list = new TreeSet<>();
showString();
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
pre();
System.out.println(sb);
}
}