자바스크립트로 코테 풀기 - 1

하머·2022년 8월 15일
0

자바스크립트로 코테 준비를 하며 얻은 팁이나 배운점을 틈틈히 적어보기로 함.

1. 파일 경로를 삼항연산자로 나타내면 백준 복붙할 때 간편하다.

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";

const input = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split("\n")
  .map(Number);

2. Array.sort 함수 사용법

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() // 오름차순 메소드

3. input값 구조 분해 할당

const [N, M] = input.shift().split(" ").map(Number); // 첫번째 입력 문단 두 숫자 할당

4. 자바스크립트에서 Object를 해쉬맵으로 쓰지 말것

 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


5. 스프레드 연산자와 max(), min()

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를 사용하여 간단하게 나타낼 수 있었다.

0개의 댓글