본문 바로가기

백준

백준 20291 파일 정리(JAVA)

문제

https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

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

www.acmicpc.net

코드

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Map<String, Integer> map = new HashMap<>();
        int cnt;

        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            String Input = br.readLine();
            String[] split = Input.split("\\\\.");
            if (map.containsKey(split[1])) {
                cnt = map.get(split[1]);
                map.put(split[1], ++cnt);
            } else {
                map.put(split[1], 1);
            }
        }

        Object[] strings = map.keySet().toArray();
        Arrays.sort(strings);

        for (Object string : strings) {
            sb.append(string + " ");
            sb.append(map.get(string));
            sb.append("\\n");
        }
        System.out.println(sb.toString());

    }

}

풀이

실버 3임에도 쉽게 풀렸는 문제이다. 풀이에는 map과 Arrays.sort를 이용해 사전식으로 정렬했다. 풀이과정은 처음 입력값의 개수를 받고 입력값의 수만큼 문자열을 읽어준다. map은 String을 key로 하고 Integer를 value로 하여준다. 이때 “.”을 기준으로 문자를 잘라준다. 주의해야 할점은 br.readline().split(”\\\\.”) 다음과 같이 해야 한다는 것이다. 아마도 “.” 이 특수문자 취급을 받아서 그런듯 하다. 그런후 만약 map에 같이 이름의 확장자가 있다면 해당 확장자를 key로 하여 value를 꺼내어 +1를 더해주고 다시 map에 넣어서 업데이트 해준다. 이런과정을 전부 마치면 map에 있는 값을 array로 꺼내어 준다. 그리고 Arrays.sort로 정렬해준다. 그후 차례대로 정렬해준다.

추가

“.”으로 split할때는 앞에 \\를 붙여야 한다는 것과 map에 동일한 값을 넣을시 기존에 있던 값이 업데이트 된다는 점이다.

'백준' 카테고리의 다른 글

백준 22858 원상 복구(small) (JAVA)  (0) 2022.07.26
백준 17413 단어 뒤집기2(JAVA)  (0) 2022.07.20
백준 20436 ZOAC 3 (JAVA)  (0) 2022.07.15
백준 10994 별찍기 - 19 (JAVA)  (0) 2022.07.14
백준 12933 오리 (JAVA)  (0) 2022.07.14