문제

갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.

그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.

프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.

한 생명체에게 얼마씩 돈을 줄 수 있는가?

또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?

 

 

입력

첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 10^1000, m과 n은 10진수 정수)

 

 

풀이

입력값이 10의 1000제곱이기 때문에 number type에서는 감당할 수 없고

큰 수는 모두 BigInt를 사용해야만 한다.

 

그렇기 때문에 일반적으로 BigInt값으로 변환해서 써야 하기 때문에

기존의 .map(Number) 대신 .map(BigInt)를 사용했다.

 

BigInt의 형태는 1n 2n 3n 등 뒤에 n이 붙어있는 형태로

원하는 출력 형태인 숫자와는 다른 모습을 가지고 있기 때문에

String으로 감싸는 등 문자열로 바꿔줘야 n이 제거된다.

 

또한 BigInt는 +, -, *, **, %연산을 정상적으로 처리하지만

나누기 연산(/)은 제대로 처리하지 못하는데

MND를 참고하자면 아래의 설명과 같이 소수점이하가 사라진다는 것을 알 수 있다.

곰은 사람을 찢고 BigInt는 소수점을 버려!

마지막으로 백준 문제를 풀면 주의해야 하는 점이 있는데 바로 .trim()이다.

백준에서는 input값을 지 멋대로 넣어주기 때문에 '12 23'과 같은 형태로 들어올 것이라고 기대하지만

' 12 34' 또는 '12 34 '처럼 앞뒤에 마음대로 공백이 들어올 수 있고 

그런 경우 input이 이상하게 들어와서 ["", "a", "b"] 형태로 배열이 되어버리고

구조분해할당 또는 a = input[0]과 같은 형태로 값을 받을 경우 엉망이 되는 것을 모르고 

오답이라는 메세지만 반복해서 받으며 포기하고 싶어질 수 있다.

 

.trim()으로 앞뒤 공백을 제거하는 것을 잊지말자.

const [a,b] = require('fs').readFileSync('/dev/stdin').toString().trim().split(" ").map(BigInt)
console.log(String(a/b))
console.log(String(a%b))
const [a,b] = '1000 100'.split(" ").map(BigInt)
console.log(String(a/b))
console.log(String(a%b))

'알고리즘 > 백준' 카테고리의 다른 글

[백준 JS] 2420번 사파리 월드  (0) 2023.03.06
[백준 JS] 1330번 두 수 비교하기  (0) 2023.03.05
[백준 JS] 1008번 A/B  (0) 2023.03.05
[백준 JS] 1001번 A-B  (0) 2023.03.05
[백준 JS] 1000번 A+B  (0) 2023.03.04

+ Recent posts