안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.

이번 포스팅은 백준 문자열 파일 정리 자바 풀이를 작성하고자 합니다.

 

문제 출처: https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

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

www.acmicpc.net

 

1. 풀이 소스

 

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        HashMap<String, Integer> map = new HashMap<>(); // 개수를 저장할 map 선언
        HashSet<String> set = new HashSet<>(); // 셋으로 고유한 문자 저장
        
        for (int i = 0; i < n; i++) {
            String type = br.readLine().split("\\.")[1]; // 정규식 문제로 이스케이프로 . 처리

            if (!set.contains(type)) { // 만약 key가 없다면 map에 저장
                set.add(type);
                map.put(type, 1);
            } else map.put(type, map.get(type) + 1); // 이미 값이 있는 경우 + 1
        }

        List<String> sortType = new ArrayList<>(set); // set을 문자열에 addAll
        Collections.sort(sortType); // 오름차순 정렬
        
        StringBuilder sb = new StringBuilder();
        for (String key : sortType) sb.append(key).append(" ").append(map.get(key)).append("\n");
        
        System.out.print(sb);
    }
}

 

 

2. 풀이 중점 사항 

 

.으로 분리하기

split 인자로 들어가는 String 값은 regex 정규식입니다. "."로 문자열을 분리하기 위해서는 "\\."을 사용하여. 을 분할하기 위한 문자로 인식할 수 있도록 해주어야 합니다.

 

HashSet

HashSet에 현재 key가 존재하는지 파악하는 메서드는 set.contains() 입니다. contains()에 값이 있다면 true, 없다면 false가 됩니다. 이를 바탕으로 값을 추가할 수 있습니다.

 

List의 컬렉션 생성자

set에 있는 key를 모두 List에 추가하고자 할 때, "컬렉션 생성자"를 토대로 컬렉션을 생성할 수 있습니다.

new ArrayList<>(set) 으로 샐 성자에 set을 넣어서 컬렉션을 생성하는 방법입니다. 

 

이상으로 파일 정리 자바 풀이를 마치도록 하겠습니다. 감사합니다.!

 

+ Recent posts