함정 시리즈

[JavaScript] 정말 보기 드문 RangeError

노새두마리 2023. 11. 24. 13:49

RangeError

JavaScript를 사용하면서 RangeError를 마주하는 것은 생각보다 드문 일입니다. JavaScript는 배열 범위를 벗어난 인덱스를 참조해도 undefined를 반환할 뿐, 오류를 반환하지는 않으니까요!

하지만 그것을 마주해 버렸습니다. 어느 부분에서 오류가 발생했는지 알 수 없는 환경에서 말이죠.

다행히도 굉장히 짧은 RangeError 문서를 통하여 핵심을 빠르게 파악할 수 있었고, Number 또는 String의 변환과 관련한 함수에 부적절한 값을 전달한 경우를 중심으로 RangeError가 반환되도록 되어 있음을 확인하였습니다.

  • String.prototype.normalize()
  • Number.prototype.toFixed()
  • Number.prototype.toExponential()
  • new Array(-1)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RangeError

 

RangeError - JavaScript | MDN

RangeError 객체는 어떤 값이 집합에 없거나 허용되는 범위가 아닐 때 오류를 나타냅니다.


작성된 코드 중에서 변환 관련한 함수는 toString을 이용한 진법 변환이 있었습니다. 요구사항에는 2진법부터 200만(!!!)진법까지 변환하도록 하는 요구사항이 있었고, 개발자 콘솔을 열어 toString의 진법으로 적당히 큰 수를 전달하니 2부터 36까지의 숫자만 허용된다는 오류 메시지를 맞이할 수 있었습니다.

0~9, A~Z로 표현 가능한 36진법까지만 공식적으로 지원하는 듯합니다. 나머지는 직접 만드는 수밖에요.


그러나

웬만해서는 런타임 오류가 발생하면 개발자 콘솔이든 터미널이든 어디서 문제가 발생했는지도 확인이 가능하므로 이 포스트가 크게 도움이 될 수 있을지는 모르겠습니다.

모든 걸 떠나서 200만진법을 요구하는 문제가 궁금하신 분은 여기로...

 

2685번: 님비합

입력의 첫 번째 줄에는 테스트 케이스의 수를 나타내는 T가 주어진다. (1 ≤ T ≤ 1000), 그리고 각 테스트 케이스의 첫 줄에는 B, X, Y를 나타내는 정수가 공백을 사이에 두고 주어진다. (2 ≤ B ≤ 2000

www.acmicpc.net