언젠가는 펼쳐 볼 아카이브

[BOJ] 24266번 - 알고리즘 수업 (알고리즘의 수행 시간5) 본문

IT/Baekjoon Oline Judge

[BOJ] 24266번 - 알고리즘 수업 (알고리즘의 수행 시간5)

개발자희망생고롸파덕 2023. 9. 20. 01:33

사용 언어 : javascript - node.js

 

#문제

출처 : 백준 온라인

 

#접근방법

문제에서 준 MenOfPassion 알고리즘을 보고, 요구하는 출력 조건을 확인해보자.

 

1)첫 번째 줄: 코드1의 수행 횟수 출력 

  >> for 반복문이 세 번 중첩된 걸 코드에서 확인할 수 있다. 중첩된 반복문은 입력된 숫자의 세제곱만큼 실행되므로, 첫번째 줄은 입력한 n의 제곱을 출력해준다.

 

2)두 번째 줄: 코드의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. (단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.

   >> 함수는 입력한 값의 세제곱만큼 실행이 되기 때문에, 최고차항의 수는 3이 되므로 두 번째 줄 출력은 3으로 고정된다. ( y = n**3 )

  

 

#첫번째 제출코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const num = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split('\n')
  .map((item) => +item);

console.log(Math.pow(num, 3));
console.log(3);

>> 결과 : 틀렸습니다.

 

잉? 왜인지 하고 문제를 다시 읽어봤는데.. 입력 n이 500,000 까지 가능하다.

만약 500,000 을 세제곱 해버린다면 자바스크립트의 Number 범위를 넘어가버리는 상황이 발생해 이상한 값이 출력될 수도 있다는 거다. 

ㅇ ㅏ.. 범위 생각을 하지 못했다. Number보다 큰 BigInt를 사용하고, 혹시 모를 백준 온라인의 결과값 체크..가 다를 수 있으니 pow 함수 말고 직접 세번 곱해주는 코드로 바꿔 줬다.

 

#최종 제출코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let num = fs.readFileSync(filePath).toString().trim().split('\n');

num = BigInt(num);

console.log(`${num*num*num}`);
console.log(3);

>> 결과 : 맞았습니다