본문으로 바로가기

baekjoon. 주유소

category Algorithm/문제 2021. 1. 29. 13:42

문제



풀이


간단한 그리디 문제이다

이번 주유소의 기름값보다 작은 주유소를 찾은 뒤 --- 1번

그 주유소까지 가는 기름을 채우고 가서 1번을 반복해주면 된다

나머지는 구현인데

사실 이 문제는 풀이가 애매하거나 몰라서라기 보단 문제 푸는데 새로운 사실을 알게되어 기록하려는 것

문제를 풀다보면 출력 값이 정수 범위를 벗어나는 케이스가 있는데 나는 이걸 해결하지 못해서 찾아봤다

그렇기 때문에 변수를 초기화해 줄 때 정수범위 바깥을 표현할 수 있는 BigInt를 불러와야한다

사용법은 크게 두가지로 나뉘는데 다음과 같다

 let answer = 0n;

 let answer1 = BigInt(0);

이렇게 선언해 놓고 그냥 평소에 쓰듯 계산해주면 된다

다만 문제를 풀 경우에는 출력값이 정확히 일치해야하기 때문에 리턴해 줄 때나 출력해 줄 때 문자열로 바꿔주면 되겠다

코드

  const input =`4
2 3 1
5 2 4 1`.split('\n').map(v=>v.split(' ').map(v=>BigInt(v))).slice(1);

  const input = require("fs").readFileSync("/dev/stdin").toString().trim().split('\n').map(v=>v.split(' ').map(v=>BigInt(v))).slice(1);

  const [dis, price] = input;
  let answer = 0n;

  for(let i=0; i<price.length-1;){
      for(let j=i+1; j<price.length;j++){
          if(price[i]>price[j] || j===price.length-1) {
              const distance = calDis(i,j);
              answer += price[i] * distance;
              i=j;
              break;
          }
      }
  }
  console.log(answer.toString());

  function calDis(start,end) {
      let sum = 0n;
      for(let i=start; i<end;i++){
          sum += dis[i];
      }
      return sum;
  }

'Algorithm > 문제' 카테고리의 다른 글

baekjoon. 큐 2  (0) 2021.03.08
baekjoon. 괄호  (0) 2021.03.07
baekjoon. 평범한 배낭  (0) 2021.01.27
baekjoon. LCS  (0) 2021.01.26
leetcode. Reverse Integer  (0) 2021.01.19