Kirby [알고리즘] SWEA 1257 K번째 문자열 (JAVA)
알고리즘/알문풀(백준, 프로그래머스, 코드트리)

[알고리즘] SWEA 1257 K번째 문자열 (JAVA)

ragabys 2023. 9. 18.

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);
    }
}

댓글