[백준] 20291번 : 파일 정리 (node.js)

Jo Chang Uk·2024년 5월 16일

1.문제

문제 링크

2.풀이

2.1 Map과 Set 자료구조

문제를 보고 map과 set중 무슨 구조를 사용할지 고민이 생겨 작성합니다.

  • set : 간단한 중복 제거
  • map : 중복 제거보다는 특정 키에 대한 값을 저장하고 관리

위 문제는 단순한 중복 제거가 아니라 중복된 파일명의 개수도 저장해야 하므로 map 구조를 사용하는게 적합한거 같습니다.

2.2 Map 자료구조의 기본 사용법

let fH = new Map();

for (let file of files) {
  // has(key)로 fH 객체에 file이 있을경우와 없을경우를 나눠 map.set(key, value) 이용해 value를 저장합니다.
  if (fH.has(file)) {
    fH.set(file, fH.get(file) + 1);
  } else {
    fH.set(file, 1);
  }
}

2.3 Map 자료구조 배열로 변환

let fileList = [...fH]
console.log(fileList);
// [ [ 'txt', 3 ], [ 'spc', 2 ], [ 'icpc', 2 ], [ 'world', 1 ] ]

2.5 코드

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

function solution(files) {
  // .을 기준으로 자르기
  files = files.map((v) => v.substring(v.indexOf(".") + 1));
  
  let fH = new Map();

  for (let file of files) {
    if (fH.has(file)) {
      fH.set(file, fH.get(file) + 1);
    } else {
      fH.set(file, 1);
    }
  }
  
  let fileList = [...fH].sort();

  // 처음에는 라인 마다 console을 찍어서 시간 초과가 나서 result로 한번만 console
  let result = [];
  for (let x of fileList) {
    result.push(x.join(" "));
  }
  console.log(result.join("\n"));
}

solution(input);

0개의 댓글