Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Object
  • react-native
  • 백준
  • react
  • 자바스크립트
  • 알고리즘
  • 코칭스터디
  • Error
  • 리액트
  • 코딩테스트
  • typescript
  • javascript
  • 회고
  • 프로그래머스
  • vite
  • ReactNative
  • Git
  • 기초

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[BEAKJOON / node.js] 13305 주유소
Study/Algorithm

[BEAKJOON / node.js] 13305 주유소

2022. 5. 28. 16:35
https://www.acmicpc.net/problem/13305

//	test.txt
4
2 3 1
5 2 4 1

sol1

최솟값을 구하듯 오른쪽으로 탐색한다. 더 작은 기름값이 있는 도시가 나올 때까지 현제 도시에서 기름을 채우도록 조건문을 건다.

const [n,a,b] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let km = a.split(' ').map(BigInt);
let price = b.split(' ').map(BigInt);

let answer = 0n;
let min = price[0];
  
for(let i=0;i<n-1;i++) {
  if(price[i]<=min) {
  min = price[i];
  }
  answer += min * km[i];
}

console.log(String(answer))	//18

1.

입력을 받을 때 BigInt() 를 사용했다. 이번 문제에서 처음 사용해 봤는데 입력받는 범위가 워낙 크다 보니 Number 대신에 쓰는 내장 객체라고 한다. 

BigInt는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.
출처 : mdn

사용 방법으로는 정수뒤에 n을 쓰고 Number() 대신 BigInt()를 쓰기만 하면 된다. 중요한 건 BigInt는 Math() 메서드를 사용할 수 없고 Number와 연산할 수 없다(에러). 즉 같은 자료형으로 변환해야 한다.

let km = a.split(' ').map(BigInt);	//BigInt로 변환
.
let answer = 0n;	// 숫자를 받게 될 answer 역시 자료형이 같도록 n을 붙여준다.

console.log(String(answer))	//BigInt 자료형은 그냥 출력하면 n이 붙어서 출력된다 (18n) String으로 변환해서 출력 해줘야 한다.

 

2.

첫번째 도시에서는 무조건 기름을 채워야 하기 때문에 첫 번째 기름 가격 = 최솟값으로 두고 반복문을 돌며 최솟값을 바꿔준다.

for(let i=0;i<n-1;i++) {
  if(price[i]<=min) {
  min = price[i];
  }
  answer += min * km[i];
}

마지막 도시에서 기름 넣을 일은 없기 때문에 for문의 범위를  n-1로 해준다. 최솟값을 저장해뒀기 때문에 지금보다 기름이 저렴한 도시가 나올 때까지 현재 도시에서 기름을 채우게 한다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

<programmers / JavaScript> 신고 결과 받기  (0) 2022.06.03
<BEAKJOON / node.js> 1181 단어정렬  (0) 2022.05.29
<BEAKJOON / node.js> 11399 ATM  (0) 2022.05.24
[BEAKJOON / node.js] 1931 회의실 배정  (0) 2022.05.24
<BEAKJOON / node.js> 11047 동전 0  (0) 2022.05.22
    'Study/Algorithm' 카테고리의 다른 글
    • <programmers / JavaScript> 신고 결과 받기
    • <BEAKJOON / node.js> 1181 단어정렬
    • <BEAKJOON / node.js> 11399 ATM
    • [BEAKJOON / node.js] 1931 회의실 배정
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바