📍 문제
https://www.acmicpc.net/problem/1141
📍 문제 풀이
문제 이해를 위해 예시를 들어보자.
만약 입력이 아래와 같이 주어졌다면 어떻게 될까?
hi | hk | h | zh |
이 경우에는 `h`가 `hi`, `hk`의 접두사이기 때문에 답은 { `hi`, `hk`, `zh` } 즉, 3이 나온다.
그래서 나 같은 경우에는 이중 반복문으로 리스트를 탐색하면서
한 단어가 다른 단어로 시작된다면 접두사임을 의미하기 때문에 결과에서 빼주는 식으로 진행했다.
이때 시작되는지 파악하는 부분에서 `startsWith`를 사용하지 않는다면
`for문`과 `equals`를 통해서 확인해야하고 이 부분에서 시간초과가 나는 것 같다.라는 나의 예상..?
words.get(j).startsWith(words.get(i))
이때 결과값은 초기값이 `n`으로 지정되어 있어야한다.
📍 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class boj_1141 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<String> words = new ArrayList<>();
for (int i = 0; i < n; i++) {
words.add(br.readLine());
}
Collections.sort(words);
int result = n;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (words.get(j).startsWith(words.get(i))) {
result--;
break;
}
}
}
System.out.println(result);
}
}
다풀고 다른 풀이 좀 찾아보니 다들 `set`을 사용하거나
`Comparator`사용해서 길이로 정렬을 했는데 그렇게해야하는 이유가 뭘까..
그냥 `sort`로만 진행해도 정렬되는거 아닌가?
'코딩테스트 > 백준' 카테고리의 다른 글
[BOJ 1699] 제곱수의 합 (S2) (1) | 2025.01.06 |
---|---|
[BOJ 2075] N번째 큰 수 (S3) (1) | 2025.01.05 |
[BOJ 1092] 배 (G5) (0) | 2024.12.28 |
[BOJ 1024] 수열의 합 (S2) (0) | 2024.12.26 |
[BOJ 14719] 빗물 (G5) (0) | 2024.12.23 |