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
'알고리즘 > BOJ (Javascript)' 카테고리의 다른 글
(Javascript) 백준 3273번 : 두 수의 합 (0) | 2022.04.03 |
---|---|
(Javascript) 백준 2812번 : 크게 만들기 (0) | 2022.04.01 |
(Javascript) 백준 1620번 : 나는야 포켓몬 마스터 이다솜 (0) | 2022.03.26 |
(Javascript) 백준 1966번 : 프린터 큐 (0) | 2022.03.26 |
Javascript(Node.js)로 백준 입력받기 (0) | 2022.03.20 |