Early Riser
생각정리
Early Riser
전체 방문자
오늘
어제
  • 분류 전체보기 (128)
    • JS (19)
    • React (33)
    • React Native (2)
    • Library, Tool (13)
    • CSS (2)
    • Algorithm (40)
    • Computer Science (3)
    • 회고 (3)
    • AI (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 파이썬
  • 부스트캠프 합격
  • 부스트캠프 9기
  • boosting
  • 밑바닥
  • BFS
  • 백트래킹
  • react
  • 손실함수
  • 자바스크립트
  • 부스트캠프 합격 후기
  • 논문리뷰
  • lightgbm
  • 프로그래머스
  • useState
  • 딥러닝
  • 비동기
  • RNN
  • global minima
  • 알고리즘
  • 오늘의불경
  • javascript
  • dfs
  • 백준
  • useEffect
  • LGBM
  • local minima
  • js
  • 완전탐색
  • 구현

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Early Riser

생각정리

백준 2870번: 수학숙제 (javascript, 구현)
Algorithm

백준 2870번: 수학숙제 (javascript, 구현)

2023. 3. 25. 19:12

문제 자체는 쉬운 문제였지만 자바스크립트를 공부한 지 얼마 안되다 보니 새롭게 배운 점이 있어 기록을 위해 글을 남겨본다.

 

먼저 알고리즘은 간단하다. 한 문자열씩 for of문으로 돌면서 숫자인지 아닌지 판별하고 숫자형일 경우 문자가 나올때까지 합쳐서 배열에 넣고, 배열을 마지막에 정렬하여 출력하며 된다.

 

문제는 문제의 조건에서 각 줄은 최대 100글자라는 조건이 문제다. 엣지케이스를 생각해보면 가장 큰 수는 999...(100자리)일 것이다. 

 

통상적으로 사용하는 javascript의 정수형 자료형은 Number인데 8바이트(64비트)를 사용한다. 이 중 1비트는 부호, 11비트는 지수부이고 52비트가 가수부이므로 Number자료형으로 표현할 수 있는 최대 정수는 2^53-1이다.  이는 당연하게도 문제의 엣지케이스인 999...(100자리)보다 작으므로 더 큰 메모리를 사용하는 자료형인 BigInt자료형을 사용해야 한다.

 

이때 문제가 생기는데 나는 배열에 숫자들을 넣은후 sort함수로 정렬하여 문제를 풀었다. 이때 lambda식으로 (a,b) => a-b을 주어서 정렬하고자 했는데 BigInt자료형으로 뺄셈연산을 한 후의 수는 BigInt자료형이고, sort함수는 인자로 Number자료형만을 받기에 문제가 생기는 것이다.

 

이를 해결하기 위해 sort함수의 lambda식에 삼항연산자를 이용해서 -1, 1, 0을 return하는 방식으로 문제를 풀 수 있었다.

 

문제 자체는 쉬웠지만 다른 언어를 공부하다 보니 그 언어의 특징들에 대한 이해가 부족해 생긴 문제이다. 

const fs = require('fs');
const inpu = fs.readFileSync("./dev/stdin").toString().trim().split('\n');

const N = Number(inpu[0])
let answer = []

for (let i=1; i<=N; i++) {
    let cash = ''
    for(let j of inpu[i]){
        if (!isNaN(j)){
            cash += j
        }
        else if(isNaN(j)){
            if (cash.length > 0){
                answer.push(BigInt(cash))
            }
            cash = ''
        }
    }
    if (cash.length > 0){
        answer.push(BigInt(cash))
    }
}

answer.sort((a, b) => (a < b) ? -1 : ((a > b) ? 1 : 0))
console.log(answer.join('\n').trim())

 

'Algorithm' 카테고리의 다른 글

백준 1325번: 효율적인 해킹(javascript, DFS)  (0) 2023.03.28
백준 14502번: 연구소 (javascript, DFS)  (0) 2023.03.28
프로그래머스: 주차 요금 계산 (파이썬, 구현)  (0) 2022.12.20
프로그래머스: [3차] 압축 (파이썬, 구현)  (0) 2022.12.20
프로그래머스: k진수에서 소수 개수 구하기 (파이썬, 구현)  (0) 2022.12.19
    'Algorithm' 카테고리의 다른 글
    • 백준 1325번: 효율적인 해킹(javascript, DFS)
    • 백준 14502번: 연구소 (javascript, DFS)
    • 프로그래머스: 주차 요금 계산 (파이썬, 구현)
    • 프로그래머스: [3차] 압축 (파이썬, 구현)
    Early Riser
    Early Riser
    2년차 프론트엔드 개발자입니다. https://github.com/EarlyRiser42

    티스토리툴바