
-Code
import java.io.*;
import java.util.*;
public class BOJ5052 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
for (int test = 0; test < testCase; test++) {
int numberCnt = Integer.parseInt(br.readLine());
// 번호 받기
String[] numbers = new String[numberCnt];
for (int i = 0; i < numberCnt; i++) {
numbers[i] = br.readLine();
}
// 사전순 정렬
Arrays.sort(numbers);
boolean flag = true;
for (int i = 1; i < numberCnt; i++) {
// 사전순 정렬로 접두사가 비슷한 것끼리 묶임
if (numbers[i].startsWith(numbers[i - 1])){
// 접두사인 경우 flag 처리 및 탈출
flag = false;
break;
}
}
System.out.println(flag ? "YES" : "NO");
}
br.close();
}
}
처음에는 길이와 값을 기준으로 정렬해서 2중 for문을 통해 검사하는 로직을 썼으나 시간 초과문제가 생겼습니다. 그럼 어떻게 해야 좋을까 생각을 하는데 무조건 정렬은 사용해야 할거 같고 for문 1개로 할 수 있는 방법이 있나에 대한 의문이 들었습니다. 그래서 고민하다가 답이 나오지 않아서 힌트를 얻고자 찾아보니 그냥 사전순 정렬을 하면 접두사가 비슷한 것끼리 묶이기 때문에 이를 이용하며 된다에 대해 알게 되고 해결하였습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 햄버거 만들기 (0) | 2026.02.10 |
|---|---|
| [백준/Java] 12981번 공 포장하기 (0) | 2026.02.10 |
| [백준/Java] 2508번 사탕 박사 고창영 (0) | 2026.02.09 |
| [백준/Java] 2816번 디지털 티비 (0) | 2026.02.09 |
| [백준/Java] 7682번 틱택토 (0) | 2026.02.08 |