[BOJ] 20291 - 파일 정리 (Java)

EunBeen Noh·2024년 7월 4일

Algorithm

목록 보기
52/52
post-thumbnail

알고리즘

  • 자료 구조
  • 문자열
  • 정렬
  • 해시를 사용한 집합과 맵
  • 트리를 사용한 집합과 맵
  • 파싱

1. 문제

  • 여러 개의 파일이 주어졌을 때, 파일들을 확장자별로 정리하는 프로그램
  • 동일한 확장자를 가진 파일의 개수를 세고, 확장자 이름의 사전 순으로 출력

2. Idea

  • 해시맵을 사용하여 확장자 count

3. 풀이

3.1. 변수 선언 및 초기화

  • map: 확장자별 개수를 저장하기 위한 HashMap
    • 키: 파일의 확장자
    • 값: 해당 확장자를 가진 파일의 개수
  • list: 확장자 이름을 저장하기 위한 ArrayList
Map<String, Integer> map = new HashMap<>();
List<String> list = new ArrayList<>();

3.2. 파일 이름 처리

  • 각 파일 이름을 .를 기준으로 분리
  • 첫 번째 토큰은 파일 이름, 두 번째 토큰은 확장자
  • 확장자가 map에 없으면 list에 추가하고, map에 확장자의 개수를 업데이트
for (int i = 0; i < n; i++) {
    StringTokenizer st = new StringTokenizer(br.readLine(), ".");
    st.nextToken();
    String extension = st.nextToken();
    if (!map.containsKey(extension)) list.add(extension);
    map.put(extension, map.getOrDefault(extension, 0) + 1);
}

3.3. 확장자 정렬

  • list를 사전 순으로 정렬
Collections.sort(list);

3.4. 결과 출력

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

4. 전체코드

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

public class 20291.파일정리 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<String, Integer> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), ".");
            st.nextToken();
            String extension = st.nextToken();
            if (!map.containsKey(extension)) list.add(extension);
            map.put(extension, map.getOrDefault(extension, 0) + 1);
        }
        Collections.sort(list);
        StringBuilder sb = new StringBuilder();
        for (String s : list) {
            sb.append(s).append(" ").append(map.get(s)).append("\n");
        }
        System.out.println(sb);
    }
}

0개의 댓글