TIL/알고리즘

[JAVA] 백준 | 15819 너의 핸들은

쑤키다요 2025. 4. 7. 22:18

📝 TIL

- [백준] 15819 너의 핸들

 

제한사항

시간제한 1초

메모리 제한 512MB

 

입출력 예

입력#1

4 1
acka1357
spectaclehong
mitslll
luke0201

 

출력#1

acka1357

🦔 설계 및 시도

사전 순서이므로 정렬은 단순 정렬이라고 생각해
Arrays.sort()를 활용하기로 했다.

 

오히려 어려웠던 점은 핸들 수와 사전 순을 입력받고

그 다음에 핸들 수만큼 입력받는, 입력단이 구현이 어려웠다.

입력 첫 줄에 핸들 수, 사전 순서가 공백으로 구분되어 들어오므로

StringTokenizer를 사용했다.

 

🔥 풀이에 사용된 개념

StringTokenizer

- 문자열을 특정 구분자(delimiter) 기준으로 분리해주는 유틸 클래스

- 기본 구분자 : 공백(스페이스, 탭, 개행 포함) / \n \t

- StringTokenizer st = new StringTokenizer(String "string")

 

- nextToken() : 다음 토큰 반환

- hasMoreTokens() : 다음 토큰이 존재하는지 여부

 

빠른 입력처리를 위해 BufferedReader + StringTokenizer 조합을 자주 사용한다.

 


 

💡 풀이 소스 코드

 

시간복잡도 : O(n log n)

공간복잡도 : O(1)

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // StringTokenizer; 입력받은 문자를 기본 delim(\t, \n 등)으로 분리
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        // 핸들 n개
        String[] handle = new String[n];
        for(int i=0; i<n; i++){
            handle[i]=br.readLine();
        }

        // 정답 함수 호출
        System.out.println(solution(handle, k));
    }

    public static String solution(String[] handle, int k){
        Arrays.sort(handle);
        return handle[k-1];
    }
}

 


🚀 새로 배운 내용

- StringTokenizer는 단순 문자열 분리에 매우 적합하다

- BufferedReader와 함께 사용하면 입출력 최적화가 가능하다

 

 


😺  느낀점

앞으로 꾸준히 입력을 연습하며 감을 익혀야겠다

 

 


*소스 코드는 다음 깃허브에 올라옵니다 -
 https://github.com/s0ooo0k/Algorithm_Study

 

GitHub - s0ooo0k/Algorithm_Study: Algorithm Study 문제 및 풀이

Algorithm Study 문제 및 풀이. Contribute to s0ooo0k/Algorithm_Study development by creating an account on GitHub.

github.com