문제를 보고 map과 set중 무슨 구조를 사용할지 고민이 생겨 작성합니다.
위 문제는 단순한 중복 제거가 아니라 중복된 파일명의 개수도 저장해야 하므로 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);
}
}
let fileList = [...fH]
console.log(fileList);
// [ [ 'txt', 3 ], [ 'spc', 2 ], [ 'icpc', 2 ], [ 'world', 1 ] ]
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);