📝 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
'TIL > 알고리즘' 카테고리의 다른 글
[Java] 프로그래머스 | 120880 특이한 정렬 (1) | 2025.04.09 |
---|---|
[JAVA] 프로그래머스 | 42748 K번째 수 (0) | 2025.04.07 |
[JAVA] 프로그래머스 | 181905 문자열 뒤집기 (0) | 2025.04.04 |
[JAVA] 프로그래머스 | 181949 대소문자 바꿔서 출력하기 (0) | 2025.04.04 |
[JAVA] 백준 | 3181 줄임말 만들기 (0) | 2025.04.02 |