[백준/BOJ] 13305 주유소 (JavaScript)

·2024년 11월 24일

알고리즘 뿌수기

목록 보기
4/4
post-thumbnail

🌱 문제

[백준/BOJ] 13305 주유소
(tmi) 요즘 쿠팡에서 산 휴대폰 감옥에 내 폰을 넣어두고 살고 있다.. 자기 전에 심심해서 나의 알고리즘 나무가 골라준 문제를 풀었는데 웬걸..!!
node.js로 맞힌 사람 810명 중에 내가 1등(2024.11.24 기준..)인 것이다..!!!! 바로 자랑하러 옴!!

☘️ 풀이

  • 그리디 알고리즘이란 !?
    • 현재 시점에서 가장 최선의 선택을 반복적으로 수행해 전체 문제의 최적해를 구하는 방법!

  • 일단 맨 뒤 가격은 필요가 없다! (pop()할 필요 없이 그냥 for문을 N-1까지 돌린다)
  • 첫 번째 가격으로 무조건 첫 번째 거리 혹은 그 이상을 사야한다!
  • 첫 번째 가격보다 작은 가격(a)이 나타나면 그 뒤에 더 작은 가격(b)이 나올 때까지의 거리를 a의 가격으로 산다! 끝!
let [N, distance, price] = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

N = Number(N);
distance = distance.split(" ").map(Number);
price = price.split(" ").map(Number);

let idx = 0;	// 뒤에 더 작은 가격이 나오면 인덱스 교체
let cost = BigInt(0);

for (let i = 0; i < N - 1; i++) {
  if (price[idx] > price[i]) {
    idx = i;
  }
  cost += BigInt(price[idx] * distance[i]);
}

console.log(cost.toString());

처음에는 BigInt를 사용하지 않아서 58점에서 뚝. 끊겨버렸다
그리고 BigInt를 사용한 후엔 Number(cost)를 출력하도록 했는데 마찬가지로 58점에서 뚝..
그냥 toString()으로 내보니 잘 작동하더라~~

🍀 결과

짠짠짠 ~~ 알고리즘 너무 안 풀려서 요즘 권태기였는데 흑흑
비록 실버3이지만 넘 뿌듯해 !!

🐾 소소한 수확

  • BigIntMath 메서드와 호환이 되지 않는다 (타입 에러 발생ㅜㅜ)
    • Math 객체의 메서드부동소수점 숫자(Number)에 기반한 연산을 수행한다
    • 하지만, BigInt는 정밀도를 유지하기 위해 정수만을 처리하므로, Math의 메서드와는 동작 원리가 다르다!
  • 그렇기 때문에 당연하게도 NumberBigInt의 혼합 사칙연산은 불가넝

2개의 댓글

comment-user-thumbnail
2024년 11월 25일

오오오 1등!!😄😄

1개의 답글