문제
풀이
간단한 그리디 문제이다
이번 주유소의 기름값보다 작은 주유소를 찾은 뒤 --- 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 |