일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- node.js
- 토마토
- 알고리즘
- 13913번
- 정리
- 6593번
- 1541번
- 2503번
- 백준
- 7526번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 14940번
- 맥주마시면서걸어가기
- 2422번
- 16439번
- 20365번
- 123만들기
- 16953번
- 17626번
- 20300번
- 타입스크립트 프로그래밍
- 5427번
- 타입스크립트
- javascript
- 나이트의이동
- 풀이
- 1926번
- 1969번
- 5014번
- 자바스크립트
Archives
- Today
- Total
Sqsung DevLog
[백준] 4358번: 생태학 (Node.js) 본문
백준에서 4358번: 생태학 (난이도: Silver II) 확인하기
4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
1. 풀이
const trees = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
console.log(
(() => {
const TOTAL = trees.length;
const counts = {};
let answer = '';
trees.forEach(tree => {
counts[tree] ? (counts[tree] += 1) : (counts[tree] = 1);
});
const keys = Object.keys(counts);
const percentageObjs = [];
keys.forEach(key => {
percentageObjs.push({ name: key, percentage: ((counts[key] / TOTAL) * 100).toFixed(4) });
});
percentageObjs.sort((a, b) => {
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
});
percentageObjs.forEach(({ name, percentage }) => {
answer += `${name} ${percentage}` + '\n';
});
return answer.trim();
})()
);
1-1. 접근 방식
입력 값으로 받은 나무들을 순회하면서 count 객체에 나무로 된 key 값이 이미 있는 경우 value를 1씩 증가해줬고, 없는 경우 새로운 프로퍼티를 생성하고 value를 1로 초기화했다.
이후 나무 정보를 사전순으로 정렬하기 위해 다시 반복문을 돌면서 나무 종과 해당 종이 차지하는 비율을 정리해둔 객체를 생성하고, 이를 새로운 배열에 담아줬다.
사전순 정렬 후에는 배열을 순회하면서 answer 변수에 종의 이름과 비율을 문자열 형태로 넣어준 뒤 반환했다.
'Algorithm' 카테고리의 다른 글
[백준] 19583번: 싸이버개강총회 (Node.js) (0) | 2023.05.19 |
---|---|
[백준] 2644번: 촌수계산 (Node.js) (1) | 2023.05.18 |
[백준] 1021번: 회전하는 큐 (Node.js) (1) | 2023.05.17 |
[백준] 16918번: 봄버맨 (Node.js) (0) | 2023.05.17 |
[백준] 1012번: 유기농 배추 (Node.js) (0) | 2023.05.16 |