알고리즘/BOJ (Javascript)

(Javascript) 백준 4358번 : 생태학

띵킹 2022. 3. 29. 23:43

 

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

 

4358번: 생태학

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

www.acmicpc.net

문제

생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.

입력

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

출력

주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.


 

오랜만에 실버1 문제를 풀었다.

맵(자료구조)을 통해 자료를 정리하고 정렬해서 출력하는 문제. 

요즘 자바스크립트 숙련도가 좀 붙어서, 고차함수로 문제를 푸는 게 꽤 재밌다..

완벽하게 풀었다고 생각하고 채점을 돌렸는데 틀렸다고 나오고, 질문 게시판의 반례를 모조리 입력해봤는데도 문제가 없어서 한참 머리를 싸맸는데, \n으로 입력을 쪼개는 경우에 배열의 마지막에 공백이 들어간다고 한다...

결국 배열 만든 후 pop 해줬음. 

const fs = require('fs');
const input = fs.readFileSync('./input.txt').toString().split('\n').map(item=>{return item.trim()})
input.pop()
const table = new Map();
input.forEach(item => {
    const data = table.get(item) || {total : 0};
    table.set(item, {
        total : data.total + 1
    })
})
const S = input.length
const array = [...table.entries()].sort().map(item => {return item[0].concat(' ').concat((item[1].total/S*100).toFixed(4))}).forEach(item=>console.log(item));

 

 

 

 

728x90