Sqsung DevLog

[백준] 13305번: 주유소 - Node.js (자바스크립트) 본문

Algorithm

[백준] 13305번: 주유소 - Node.js (자바스크립트)

sqsung 2023. 6. 13. 12:59

1. 문제 ㅡ 13305번: 주유소 (난이도: Silver III)

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

2. 풀이 ㅡ Node.js (자바스크립트)

const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const N = +input[0];
const distances = input[1].split(' ').map(val => BigInt(val));
const prices = input[2].split(' ').map(val => BigInt(val));

const solution = () => {
  let cheapestPrice = prices[0];
  let totalCost = 0n;

  for (let i = 0; i < distances.length; i++) {
    totalCost += cheapestPrice * distances[i];

    if (cheapestPrice > prices[i + 1]) cheapestPrice = prices[i + 1];
  }

  return String(totalCost);
};

console.log(solution());

2-1. 풀이 설명

N개의 도시를 다 통과하기 위해 필요한 최저 기름 값을 계산하는 그리디 유형의 문제다. 이번 문제에서 특별히 주의해야 할 점이 있다면 BigInt를 사용해야 한다는 점이다. 

 

시작하는 시점에 가장 저렴한 기름 값은 현재 도시에 위치한 주유소의 기름 값이므로, 가장 저렴한 기름 값 정보를 저장해 둘 cheapestPrice 변수를 선언하고 현재 도시의 기름 값으로 초기화한다. 누적된 비용을 나타내는 totalCost 변수는 BigInt 값을 받을 수 있도록 0n으로 초기화한다. 

 

이후 각 도시 간의 거리 정보들이 저장되어 있는 distances 배열의 길이만큼 for문을 돌면서 아래 과정을 반복하면 된다.

 

   1. 누적 비용에 cheapestPrice * 이동해야할 거리를 더한다

   2. 다음 도시의 기름 값이 cheapestPrice보다 저렴한 경우, cheapestPrice를 해당 도시의 기름 값으로 변경 

 

마지막에는 누적된 비용을 string으로 변경해서 반환해 주면 된다.