본문 바로가기
Language/Java

[백준 | Java] 20291번 파일 정리 - String, Sort, Map

by ㅇ달빛천사ㅇ 2025. 2. 18.
728x90
20291번 / 파일 정리

파일 정리

🏷️ 관련 주제 : String Sort Map



💦 나의 시도

String split()Map을 이용한 방법

  1. 입력받을 문자열 개수를 입력 받아 int형으로 변환 후, int N에 할당
  2. 확장자와 개수를 담을 Map<String, Integer> extensions를 선언
    • 키 : 확장자
    • 값 : 개수
  3. 0 ~ (N - 1) 범위를 반복문을 돌면서 extensions에 확장자와 개수 추가
    • 확장자를 가져와 String e에 할당
      String e = br.readLine().split(".")[1];
    • extensions의 키 e에 대한 값을 1 증가
      extensions.put(e, extensions.getOrDefault(e, 0) + 1);
  4. Stream API를 이용하여 extensions의 키를 알파벳순으로 오름차순 정렬하여 일차원 String 배열로 변환 후, String[] extensionsKey에 할당
    String[] extensionsKey = extensions.keySet().stream().sorted().toArray(String[]::new);
  5. extensionsKey에서 원소를 하나씩 꺼내 BufferedWriter에 키와 값을 공백으로 구분하여 쓰고 줄바꿈하기
  6. BufferedWriterclose() 메서드 실행하여 결과값 출력하기

💥 ArrayIndexOutOfBoundsException


String의 split() 메서드가 제대로 동작하지 않은 것 같아서
'마침표(.)를 기준으로 문자열 분리할 때에는 마침표(.)만 쓰면 문자를 인식 못하는 건가?'
라는 생각이 들었습니다.

그리고 인터넷 검색 결과
split() 메서드 사용 시, 마침표(.)를 기준으로 문자열을 분리하려면 다음과 같은 방법을 사용해야한다는 것을 알게되었습니다.

// 다음 두가지 방법 중 하나를 사용하면 됩니다.
split("\\.");
split("[.]");

 

그리고 String e = br.readLine().split("\\.")[1];과 같이 코드를 수정한 결과 성공적으로 제출을 할 수 있었습니다.



📑제출 기록 및 오답 원인



💯 해결 방법

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

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());
        Map<String, Integer> extensions = new HashMap<>();

        for (int i = 0; i < N; i++) {
            String e = br.readLine().split("\\.")[1];
            extensions.put(e, extensions.getOrDefault(e, 0) + 1);
        }

        String[] extensionsKey = extensions.keySet().stream().sorted().toArray(String[]::new);

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (String e : extensionsKey) {
            bw.write(e + " " + extensions.get(e)+"\n");
        }   

        bw.close();
    }
}

🏷️ 문제 풀면서 참고한 블로그

728x90