자바스크립트로 코테 준비를 하며 얻은 팁이나 배운점을 틈틈히 적어보기로 함.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
const input = fs
.readFileSync(filePath)
.toString()
.trim()
.split("\n")
.map(Number);
const sortedArr = input.sort((a, b) => a - b); // number값 오름차순
const reverseSortedArr = input.sort((a, b) => b - a); // number값 내림차순
const objectValueSortedArr = input.sort((a, b) => a.value - b.value); // 객체 value값 오름차순
const withoutUpperCaseSortedArr = input.sort((a, b) => {
const upperCaseA = a.toUpperCase();
const upperCaseB = b.toUpperCase();
if(upperCaseA > upperCaseB) return 1;
if(upperCaseA < upperCaseB) return -1;
if(upperCaseA === upperCaseB) return 0;
} // 대소문자 구분없이 string값 오름차순
const reverseSortedArr = input.reverse() // 오름차순 메소드
const [N, M] = input.shift().split(" ").map(Number); // 첫번째 입력 문단 두 숫자 할당
const freq = arr
.sort((a, b) => a - b)
.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {}); //빈도를 reduce로 구해서 객체로 저장
2108 통계값 에서 최빈값을 해시맵으로 만들어 구했는데 Object로 해시맵을 만들어서 풀면 안된다고 한다.
Map() 메소드를 사용해 풀면 좀더 나은 성능으로 풀 수 있음
https://erim1005.tistory.com/entry/Javascript-%EC%97%90%EC%84%9C-Object%EB%A5%BC-%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%B2%98%EB%9F%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94
const getRange = (arr) => {
return Math.max(...arr) - Math.min(...arr);
};
------------
// 가장 빈도 높은 value 구함
let freqMax = Math.max(...Object.values(freq));
// key를 활용해서 각각의 key의 value가 freqMax에 해당하면 minArr에 key 넣기
Object.keys(freq).forEach((key) => {
if (freq[key] === freqMax) {
minArr.push(key);
}
});
2108 에서 범위와 최빈값에 사용되었던 로직이다. 스프레드연산자와 max를 사용하여 간단하게 나타낼 수 있었다.