본문 바로가기

백준20291 - 파일 정리 Python | JS 본문

개발/algorithm

백준20291 - 파일 정리 Python | JS

자전하는명왕성 2023. 10. 27. 09:59

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

해당 문제는 입력값에서 등장하는 확장자 파일의 갯수를 확장자 이름의 사전순으로 정렬하여 반환하는 문제다.

 

파이썬에서는 아래와 같은 콜렉션 모듈에서 제공하는 Counter 메서드를 사용해도 되지만, 이번 포스팅에서는 다루지 않고,

파이썬과 자바스크립트 모두 딕셔너리(Python) | 객체(JS)를 사용하여 풀이했다.

from collections import Counter

 

문제 풀이는 그리 어렵지 않다.

먼저 확장자를 key | 등장 횟수를 value로 가질 딕셔너리 | 객체를 선언한다.

이후 파일명에서 등장하는 온점이 하나 뿐이라고 했으니, '.'을 기준으로 입력값을 쪼갠 뒤에 뒤에 있는 확장자를 딕셔너리 | 객체에 추가한다.

데이터 추가가 모두 끝났으면 해당 딕셔너리 | 객체를 2차원 배열로 전환하고 확장자 이름에 따라 정렬 후 반환해주면 된다.

 

파이썬 코드와 자바스크립트 코드 모두 같은 논리로 작성하였다.

 

파이썬 코드

import sys
data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = data_temp.read().splitlines()

def solution (data) :
  data.pop(0)

  dic = {}
  for v in data :
    extend = v.split('.')[1]
    dic[extend] = dic.get(extend, 0) + 1
  
  entries = [[key, value] for key, value in dic.items()]
  result = list(map(lambda y : ' '.join(map(str,y)), sorted(entries, key= lambda x : x[0])))
  print('\n'.join(result))

solution(input_data)

 

자바스크립트 코드

const fs = require("fs");
const input = fs
  .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt")
  .toString()
  .trim()
  .split("\n");

function solution(data) {
  data.shift();
  const dic = {};

  data.forEach((el) => {
    extend = el.split(".")[1];
    dic[extend] = (dic[extend] || 0) + 1;
  });

  const entries = Object.entries(dic).sort((a, b) => a[0].localeCompare(b[0]));
  const result = entries.map((el) => el.join(" "));
  console.log(result.join("\n"));
}

solution(input);
Comments