<주요 문제 정리>
1. N개의 단어가 있다.
2. 단어를 단어길이만큼 오름차순으로 정렬한다.
3. 단어의 길이가 같으면 단어를 사전순으로 정렬한다.
4. K번째 단어를 출력한다. (결과)
//1. 단어 길이 정렬
//2. 단어의 길이가 같은 단어를 사전순으로 정렬
//3. 사전의 앞에서 k번째 위치한 단어 출력하는 기능 설계
// 1. 리스트 stirng 타입 정의.
// 2. 단어장에 있는 수 n개와 단어의 위치K를 공백을 두고 입력받고
// 3. n개만큼 리스트가 돌아감
class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
//System.out.println("N= " + N + " K= " + K);
List<String> list = new ArrayList<>(N);
for(int i =0; i <= N; i++){
String word = sc.nextLine();
list.add(word);
}
// for(int i=0; i < N ; i++){
// System.out.println(i +"번째" + "word는: " + list.get(i));
// }
// 정렬: 1) 길이 오름차순 2) 길이 같으면 사전순
list.sort((a, b) -> {
if (a.length() != b.length()) {
return a.length() - b.length(); // 글자수 기준 오름차순
} else { //길이가 같을 경우
return a.compareTo(b); // 사전순 정렬
}
});
// for (String word : list) {
// System.out.println(word);
// }
System.out.println(list.get(K));
}
}
처음엔 이렇게 제출을 했는데 테스트코드 15번째에서 막혔다.
타임아웃 오류가 걸렸다.
아마 문제 이 문제 중 조건
1 <= N <= 1000
1 <= K <= N에서 뭔가 생각하지 못한게 걸린듯 했다.
그래서 여기서부터는 챗지피티의 도움을 얻었다.


그리고나서 챗지피티한테 보완점에 대해 물어봤는데
처음에 변수 선언할 때
int N = sc.nextInt();
int K = sc.nextInt();
sc.nextLine(); // ← 개행문자 제거 (매우 중요!)
이렇게 sc.nextLine()해야하는 이유는 이해가 안 갔다.


이것을 통해 N 과K 를 입력받고
for문에서 (int i; i < N; i++)
했을 때 N-1개만 입력받던 이유에 대해 이해할 수 있었다.
for (int i = 0; i < N; i++) { // <= 말고 < 로
String word = sc.nextLine().trim();
list.add(word);
}
으로 .trim()을 넣어 빈 문자열이 들어가지 않도록 처리했다.
또한 처음에
int N = sc.nextInt();
int K = sc.nextInt();
sc.nextLine(); // ← 개행문자 제거 (매우 중요!)
하여 개행문자를 제거하도록 처리했다.
class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
sc.nextLine();
//System.out.println("N= " + N + " K= " + K);
List<String> list = new ArrayList<>(N);
for(int i =0; i < N; i++){
String word = sc.nextLine().trim();;
list.add(word);
}
// for(int i=0; i < N ; i++){
// System.out.println(i +"번째" + "word는: " + list.get(i));
// }
// 정렬: 1) 길이 오름차순 2) 길이 같으면 사전순
list.sort((a, b) -> {
if (a.length() != b.length()) {
return a.length() - b.length(); // 글자수 기준 오름차순
} else { //길이가 같을 경우
return a.compareTo(b); // 사전순 정렬
}
});
//for (String word : list) {
// System.out.println(word);
//}
System.out.println(list.get(K-1));
}
}
아무래도 system.out.println 말고 구름에서 처음 제공했던
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println("Hello Goorm! Your input is " + input);
}
를 이용해서 해야하는듯 했다.
이를통해 코드를 보완했다.
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫 줄 입력 (N과 K)
String[] firstLine = br.readLine().split(" ");
int N = Integer.parseInt(firstLine[0]);
int K = Integer.parseInt(firstLine[1]);
// 단어 리스트 생성
List<String> list = new ArrayList<>(N);
// 단어 N개 입력받기
for (int i = 0; i < N; i++) {
list.add(br.readLine().trim());
}
// 정렬: 1) 길이 오름차순, 2) 길이 같으면 사전순
list.sort((a, b) -> {
if (a.length() != b.length()) {
return a.length() - b.length();
} else {
return a.compareTo(b);
}
});
// K번째 단어 출력 (인덱스는 0부터 시작하므로 K-1)
System.out.println(list.get(K - 1));
}
}
평소에는 C언어로 코딩테스트를 준비했지만,
Java로 문제를 풀어보니 문법이 많이 헷갈렸고,
시간 초과를 방지하기 위한 입력·출력 최적화와 관련된 공부가 더 필요하다고 느꼈다.
이 문제는 구름에서 출제된 것으로, 저작권은 구름에 있습니다.
아래 내용은 개인적인 풀이이며, 정답과 다를 수 있습니다.