📍문제 링크
https://www.acmicpc.net/problem/4358
📍알고리즘 분류
- 자료 구조
- 문자열
- 해시를 사용한 집합과 맵
- 트리를 사용한 집합과 맵
📍문제 풀이
- 예를 들어 어떤 숲에 있는 나무 종 문자열들이 일렬로 주어지는데, 전체에서 몇 퍼센트를 차지하는지 출력하면 된다
📍의사 코드
- 빈 객체를 만들고 주어진 문자열이 존재하면 기존 갯수 +1, 없으면 1 을 밸류로 할당하는 반복문을 실행한다
- 객체가 완성되면 객체를 순회하며 전체 데이터의 수로 나무의 갯수를 나누고 toFixed(4) 메서드로 소수 4째까지 반올림한 값을 밸류값으로 변환한다.
📍코드 (JavaScript)
const input = require('fs')
.readFileSync('/dev/stdin')
.toString()
.trim()
.split('\n');
const size = input.length;
const obj = {};
const answer = [];
for (let tree of input) {
obj[tree] = obj[tree] ? obj[tree] + 1 : 1;
}
for (let tree in obj) {
const total = obj[tree];
obj[tree] = ((total * 100) / size).toFixed(4);
answer.push(`${tree} ${obj[tree]}`);
}
console.log(answer.sort().join('\n'));
📍리뷰
- 반복문을 2번 쓰지 않고 Object.keys 메서드를 활용하면 시간을 단축할 수 있는듯 하다