매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
해커랭크에서 medium 문제를 골랐는데 생각보다 쉽(?)다고 느꼈던 문제.
사실 쉽다기 보다는... 크게 고민하지 않고 풀 수 있는 문제라고 생각했다. 하지만 이런 문제가 아니라면 BigInt를 언제 또 이렇게 써보겠는가 싶기도 하고.
어쨌든, 꺾인 마음을 어서 추스리고 다시 일상으로 그리고 루틴을 찾아 열심히 달려야지.
간혹 내가 쳇바퀴 속 햄스터인가? 하는 생각이 들 때도 있는데 차라리 햄스터라도 되어 이 루틴을 미친듯이 반복이라도 하고싶다는 그런 미친 생각도...ㅎㅎ.
여튼. 각설하고 오늘은 간만에 자바와 자바스크립트 두 가지 언어로 풀어보았는데 각각의 언어에서 큰 수를 어떻게 활용하는지 간략하게 정리해보자.
갠적으로 오늘 문제는 자바스크립트보다는 자바가 더 쉽게 풀린 게 아닌가 싶긴 하다.
아 물론, BigInteger 활용법은 사용하지 않으면 까먹을 것 같아서 자바스크립트와 함께 가장 아랫단에 간략히 정리하고 넘어가려 한다.
class Result {
/*
* Complete the 'extraLongFactorials' function below.
*
* The function accepts INTEGER n as parameter.
*/
public static void extraLongFactorials(int n) {
// Write your code here
BigInteger accumulate = new BigInteger("1");
for(int i = 1; i <= n; i += 1) {
accumulate = accumulate.multiply(BigInteger.valueOf(i));
}
System.out.println(accumulate);
}
}
처음에 recursion으로 풀어보려고 낑낑대다가 고민하는 시간이 너무 길어지기만 하는 것 같아서 과감히 while과 for로 해결했다.
너무 한 방법에 집착한 나머지 시간을 초과하는건... 그리 좋지 않은듯.
나중에 쉬는 시간에나 더 고민하시고! ㅎㅎ 우선 되는 방법을 빠르게 찾자.
자바스크립트 1(while문 활용)
function extraLongFactorials(n) {
let accumulate = BigInt(1);
let number = BigInt(n);
while (number > 0) {
accumulate *= number;
number -= BigInt(1);
}
console.log(String(accumulate));
}
자바스크립트 2(for문 활용)
function extraLongFactorials(n) {
let totalValue = BigInt(n);
for (let i = n - 1; i > 1; i -= 1) {
totalValue *= BigInt(i);
}
console.log(String(totalValue));
}
자바에서는 BigInteger, 자바스크립트에서는 BigInt라고 하는 소위 '큰 수'를 표현하는 방법.
사실 코딩테스트를 할 때 외에는 잘 만나보지 못했던 기능이기에 이렇게 나왔을 때 한번 정리하고 가는게 맞는 것 같아서 얕게마나 정리한다.
나중에 검색했을 때 쉽게 찾아보기라도 할 수 있도록 ㅎㅎ
1. 자바의 BigInteger
BigInteger bigNumber = new BigInteger("10000");
bigNumber1.add(bigNumber2)
,bigNumber1.subtract(bigNumber2)
,bigNumber1.multiply(bigNumber2)
,bigNumber1.divide(bigNumber2)
,bigNumber1.remainder(bigNumber2)
2. 자바스크립트의 BigInt
const bigint = 1234567890123456789012345678901234567890n;
const sameBigint = BigInt("1234567890123456789012345678901234567890");
const bigintFromNumber = BigInt(10); // 10n과 동일합니다.
오늘 풀면서 까다로왔던 부분이 바로 일반 숫자와 BigInt(eger)를 섞어서 계산해야 하는 부분이었다.
'이건 되지 않을까?' 하는 부분까지도 모두 명시적 형변환이 필요했던 게 의외라면 의외.
오늘도 이렇게 정리해보는 조그마한 지식. 그리고 코딩테스트.
쳇바퀴처럼 또 내일도 열심히 코테를 굴려보자!!!!!
안녕하세요 혹시 해커랭크에서 알고리즘 문제 풀때 문제 초기화 버튼은 없는건가요?... 문제가 지워졌는데 되돌릴 방법이 없나 해서요 ㅠㅠ