_우지 2022. 7. 2. 12:28

문제링크

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

 

배운점

Map의 value값에 +1 을 해주기 위해서는 다시 set을 사용하여야합니다.

알고 있었지만 뭔가 낯설어서 메모합니다.

for (let i = 0; i < input.length; i++) {
  if (dic.get(input[i])) {
    //상기시킨점
    dic.set(input[i], dic.get(input[i]) + 1);
  } else {
    dic.set(input[i], 1);
  }
}

 

Map의 크기를 알아내기위해서는 size 라는 메소드를 사용합니다. 

문제풀이와는 관련이 없습니다.

// 상기시킨점
let total = dic.size;

 

Map의 순회를 하기위해서는 for of 문을 사용합니다.

// 상기시킨점 Map 순회
for (let tree of dic) {
  per = ((tree[1] / total) * 100).toFixed(4);
  strr = tree[0] + ` ${per}`;
  result.push(strr);
}

 

문제풀이

Map 자료구조를 사용할줄 아는가에 대한 문제입니다.

const fs = require("fs");

BOJkey = 0;

let input = fs
  .readFileSync(BOJkey ? "./자바스크립트로/4358/input.txt" : "./dev/stdin")
  .toString()
  .trim()
  .split("\n");

let dic = new Map();

for (let i = 0; i < input.length; i++) {
  if (dic.get(input[i])) {
    //상기시킨점
    dic.set(input[i], dic.get(input[i]) + 1);
  } else {
    dic.set(input[i], 1);
  }
}
// 상기시킨점
// let total = dic.size;
let total = input.length;
// console.log(total);
let result = [];
let per;
let strr = "";
// 상기시킨점 Map 순회
for (let tree of dic) {
  per = ((tree[1] / total) * 100).toFixed(4);
  strr = tree[0] + ` ${per}`;
  result.push(strr);
}

result.sort();
console.log(result.join("\n"));