Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

연습장/백준(BOJ) 문제풀이

[백준 11652] 카드 with Node.js

2021. 4. 29. 23:23

문제 링크

www.acmicpc.net/problem/11652

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

풀이

const [n, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");

function mergeSort(arr) {
    if (arr.length <= 1) return arr;

    const mid = Math.floor(arr.length/2);
    const left = mergeSort(arr.slice(0, mid));
    const right = mergeSort(arr.slice(mid));

    let i = 0; let j = 0;
    const sorted = [];

    while (i < left.length && j < right.length) {
        if (left[i] < right[j]) {
            sorted.push(left[i]);
            i++;
        }
        else {
            sorted.push(right[j]);
            j++;
        }
    }

    if (i < left.length) sorted.push(...left.slice(i));
    if (j < right.length) sorted.push(...right.slice(j));

    return sorted;
}

const sorted_arr = mergeSort(arr.map(v => BigInt(v)));
let maxCount = 0;
let curCount = 0;
let prevNumber = "";
let largest = 2**62;
sorted_arr.forEach(v => {
    if (prevNumber !== v) {
        prevNumber = v;
        curCount = 0;
    }
    curCount++;
    if ((curCount > maxCount) || (curCount === maxCount && largest > v)) {
        maxCount = curCount;
        largest = v;
    }
});
console.log(String(largest));

병합 정렬로 오름차순 정렬한 뒤, 정렬한 배열을 순회하면서 가장 많이 있는 수 중에서 최솟값을 출력하였다.

 

이 문제에서 주어지는 수의 범위는 -262 ~ 262이다. 자바스크립트의 Number 원시 값은 253-1까지의 정수까지만을 안정적으로 나타낼 수 있으며, 이를 초과하는 범위의 수는 오차가 발생할 수 있다. 자바스크립트 내장 객체인 BigInt는 길이의 제약 없이 정수를 표현할 수 있도록 하는 객체이다. BigInt 타입의 값은 정수 리터럴에 n을 붙이거나, BigInt()를 호출하여 만들 수 있다. 따라서, 이 문제는 BigInt를 사용하여야 해결할 수 있다.

저작자표시 비영리 (새창열림)

'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글

[백준 13305] 주유소 with Node.js  (1) 2021.05.01
[백준 15650] N과 M (2) with Python  (0) 2021.04.30
[백준 1874] 스택 수열 with Python  (0) 2021.04.28
[백준 1620] 나는야 포켓몬 마스터 이다솜 with Node.js  (0) 2021.04.27
[백준 15649] N과 M (1) with Python  (0) 2021.04.27
    '연습장/백준(BOJ) 문제풀이' 카테고리의 다른 글
    • [백준 13305] 주유소 with Node.js
    • [백준 15650] N과 M (2) with Python
    • [백준 1874] 스택 수열 with Python
    • [백준 1620] 나는야 포켓몬 마스터 이다솜 with Node.js
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바