알고리즘/java

<java>백준 4374 - map

잼추 2024. 5. 31. 23:17

 

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