https://www.acmicpc.net/problem/4374\
틀렸습니다를 보고 들어온 사람들을 위한 간단 tip
글자 쪼개기 단위는 빈칸이 아닙니다. a-z가 아닌 모든 글자에요!
static String reg = "[\\W_]+";
이걸로 시간 뺏기신 모든 분들 응원합니다 ㅜㅜ
최근 올라온 지 얼마 안된 것 같은 문제들을 조금씩 도전하고 있는데
java풀이가 하나도 없는 문제는 처음 인것 같다.
사실 입출력에 관한 문제 이니 크게 문제 설명할 것은 없는듯 하고
한줄 씩입력 받아서 쪼개고 다시 넣어서
입력 된 숫자 빈도에 맞는 글자들만 다시 return 하면 되는 방식 이다.
요즘 stream 사용을 열심히 공부하는 중이기 때문에
stream 위주로 보면 좋을 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Q4374 {
/*
* n을 입력받고 단어의 개수가 일치하면 출력
* map으로 단어 분석한다음 개수가 같은거 filter
* 출력
\ * */
static int n;
static String reg = "[\\W_]+";
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while(true){
try {
n = Integer.parseInt(reader.readLine());
}catch (Exception e){
break;
}
List<String> words = new ArrayList<>();
while(true){
String str = reader.readLine(); // 한줄 씩 입력 받아서 쪼개고 넣기
if(str.equals("EndOfText")){
break;
}
words.addAll(Arrays.stream(str.split(reg))
.filter(i -> i.length() > 1)
.filter(Predicate.not(String::isBlank))
.map(String::toLowerCase)
.collect(Collectors.toList()));
}
List<String> answers = words.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))// map생성
.entrySet().stream().filter(i -> i.getValue() == n)//개수 같은거만 filter
.map(Map.Entry::getKey)//키만 빼서
.sorted()
.collect(Collectors.toList());//정렬
if(answers.size() > 0){
answers.forEach(System.out::println);
}else{
System.out.println("There is no such word.");
}
System.out.println();
}
}
}
'알고리즘 > java' 카테고리의 다른 글
<java> 세그먼트 트리 segment tree (0) | 2024.06.04 |
---|---|
<java> map 의 사용 (0) | 2024.06.01 |
<java> 전력망을 둘로 나누기 - tree, 완전 탐색 (0) | 2024.05.29 |
<java> 모음사전, TreeSet (0) | 2024.05.28 |
<java> Orderly Queue (0) | 2024.05.27 |