본문 바로가기
Problem Solving/Baekjoon

[백준] 20291 파일 정리 - Data Structure / Java

by graycode 2023. 3. 11.

 문제 링크

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net

 

 풀이 과정

입력받은 파일명을 "." 구분자로 분리할 split 함수에서 "." 을 인식하기 위해,

정규표현식에 따라 "[.]" 또는 "\\." 으로 구분자를 지정한다.

 

이후 Map의 성질과 getOrDefault 함수를 활용하여 입력받은 확장자 파일의 개수를 저장하고,

key 값인 확장자 명으로 정렬하여 확장자명과 해당 개수를 출력한다

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        Map<String, Integer> map = new HashMap<>();

        while (n-- > 0) {
            String ext = br.readLine().split("[.]")[1];
            map.put(ext, map.getOrDefault(ext, 0) + 1);
        }

        List<String> list = new ArrayList<>(map.keySet());
        Collections.sort(list);

        StringBuilder sb = new StringBuilder();
        for (String key : list) {
            sb.append(key).append(" ").append(map.get(key)).append("\n");
        }

        bw.write(sb.toString());
        bw.flush();
    }

}

댓글