문제
갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
한 생명체에게 얼마씩 돈을 줄 수 있는가?
또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
입력
첫째 줄에는 최백준 조교가 가진 돈 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를 참고하자면 아래의 설명과 같이 소수점이하가 사라진다는 것을 알 수 있다.
마지막으로 백준 문제를 풀면 주의해야 하는 점이 있는데 바로 .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 |