https://www.acmicpc.net/problem/1141
코드설명
문자열(String) + 해시셋(HashSet) + 정렬(Sort) 을 활용합니다.
접두사로 포함되지 않게 하기 위해
1. 길이에 따라 내림차순 정렬을 합니다.
2. 각 문자를 substr(0, 끝위치) (여기서 끝위치는 포함안되고 endIndex - 1 까지가 포함, 즉 [0, endIndex - 1] ) 로 Hashset에 삽입합니다.
3. 중복확인으로 접두사 X인 단어들만 선별하여 삽입합니다.
구현시에 유의할 사항은 Comparator입니다.
저는 Arrays.sort에 익명함수 Comparator를 직접 구현해서 사용했습니다.
Arrays.sort(words, 0, N, new Comparator<String>() {
@Override
public int compare(String word1, String word2) {
return Integer.compare(word2.length(), word1.length());
}
});
당연히, 아래와 같이 익명함수 대신 Class를 따로 만들어서 하는것도 가능합니다.
Arrays.sort(words, 0, N, new WordLengthComparator());
class WordLengthComparator implements Comparator<String>{
@Override
public int compare(String word1, String word2) {
return Integer.compare(word2.length(), word1.length());
}
}
코드
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
static int N, M, S, P, K, A, B, X, L, R;
static int answer = 0;
static HashSet<String> hashset = new HashSet<>();
static String[] words = new String[51];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
words[i]= st.nextToken();
}
Arrays.sort(words, 0, N, new Comparator<String>() {
@Override
public int compare(String word1, String word2) {
return Integer.compare(word2.length(), word1.length());
}
});
for(int i=0; i<N; i++) {
if(hashset.contains(words[i]) == false) {
answer += 1;
for(int j=0; j<=words[i].length(); j++) {
hashset.add(words[i].substring(0,j));
}
}
}
System.out.println(answer);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1389 케빈 베이컨의 6단계 법칙 - BFS(넓이우선탐색) JAVA (0) | 2024.09.24 |
---|---|
[백준] 1303 전쟁 - 전투 - BFS(너비우선탐색) JAVA (0) | 2024.09.20 |
[백준] 1105 팔 - 아이디어(Idea) + 수학(Math) + 탐욕법(Greedy) JAVA (0) | 2024.09.18 |
[백준] 24481 알고리즘 수업 - 깊이 우선 탐색 3 - DFS(깊이우선탐색) JAVA (0) | 2024.09.18 |
[백준] 23757 아이들과 선물 상자 - 우선순위큐(PriorityQueue) JAVA (0) | 2024.09.17 |