티스토리 뷰
문제는 위 링크에서 볼 수 있다. 문제에 대한 해설보다는 기억하고 싶은 개념, 사고, 문법을 기록하는 글이다.
답안은 맨 아래에 표기해 두었다.
구현 능력
너무나 대놓고 큐(queue)의 개념을 활용하면 되는 문제였다.
문제를 몇개 안 풀어 봤지만 보통 for문보다는 while문을 더 활용하는 것 같다.
큐(queue)문제는 shift()와 push()를 활용하면 좋다.
이 문제를 풀 때 처음에 지나간 트럭을 passedTruck이라는 변수에 담았는데, 생각해보니 지나간 트럭을 담을 필요가 없었고,
그냥 몇 초가 걸리는지만 변수에 숫자를 담아 증가시키면 되는 문제였다.
코드를 작성하고 불필요한 것은 없는지 더 생각해봐야겠다.
기억하기
1. fill() 메서드로 배열에 특정 값 채워넣기
ES6에 도입된 메서드이다. 인수로 전달받은 값을 배열의 처음부터 끝까지 요소로 채운다. 이 때 원본 배열이 변경된다.
이전 백준에서 알고리즘 풀었을 때 자주 사용하던 방식이다.
let bridge = Array(2).fill(0);
// bridge = [0, 0]
fill() 기존에 있는 배열의 원소를 바꿀 수도 있다는 점을 알아두자.
const arr = [1, 2, 3];
// 인수로 전달 받은 값 0을 배열의 index 1부터 끝까지 요소로 채운다.
arr.fill(0, 1);
// arr = [1, 0, 0]
// 만약 arr.fill(0); 을 하면 arr = [ 0, 0, 0 ]으로 변경될 것이다.
2. reduce() 메서드로 배열의 합계 구하기
다리 위에 올라간 트럭 무게의 합을 구할 때 reduce()로 구현했다.
문제는 reduce()를 써야한다는 것은 알았지만, 백지의 상태에서 쓰려니 까먹어서 결국 어떤식으로 쓰는지 또 찾아봤다.
reduce()에서 초기값은 생략 가능하다. 쓰지 않으면 배열의 첫 번 째 원소를 가져다 쓰기 때문이다.
그러니 당연하게도 비어있는 배열에서 reduce()쓰면 타입에러가 발생한다. 이러한 오류를 줄이기 위해서 초기값은 항상 전달하는 편이 더 안전하다.
let sum = bridge.reduce((pre, curr) => pre + curr, 0);
내 코드의 경우 위에서 bridge에 초기값으로 이미 배열에 0을 할당한 상태이다. 그래서 reduce()에 초기값을 설정해주지 않으면 배열의 첫번째 원소를 사용하기 때문에 오류가 나지 않는다.
let bridge = Array(bridge_length).fill(0);
// bridge = [0, 0]
만약 fill(0)을 하지 않았다면?
초기값이 없는 빈 배열이라는 오류를 볼 수 있다.
let bridge = Array(bridge_length);
// bridge = []
let sum = bridge.reduce((pre, curr) => pre + curr);
// TypeError: Reduce of empty array with no initial value
답안
function solution(bridge_length, weight, truck_weights) {
let bridge = Array(bridge_length).fill(0);
let time = 0;
while (bridge.length) {
bridge.shift();
time += 1;
if (truck_weights.length) {
let sum = bridge.reduce((pre, curr) => pre + curr, 0);
if (sum + truck_weights[0] <= weight) {
bridge.push(truck_weights.shift());
} else {
bridge.push(0);
}
}
}
return time;
}
'알고리즘 > 프로그래머스-Programmers' 카테고리의 다른 글
[프로그래머스-해시] 베스트앨범 - 자바스크립트(JavaScript) (0) | 2022.03.22 |
---|---|
[프로그래머스-해시] 위장 - 자바스크립트(JavaScript) (0) | 2022.03.22 |
[프로그래머스-해시] 완주하지 못한 선수 - 자바스크립트(JavaScript) (0) | 2022.03.19 |
[프로그래머스-스택/큐] 프린터 -자바스크립트(JavaScript) (0) | 2022.03.19 |
[프로그래머스-스택/큐] 기능개발 문제 (0) | 2022.03.17 |
- Total
- Today
- Yesterday
- 타입스크립트
- React Query
- GIT
- 모두를위한컴퓨터과학
- network
- html
- React
- 모두를 위한 컴퓨터 과학
- 자바스크립트 비동기 처리
- 리액트네이티브
- css
- 클로저
- 자바스크립트알고리즘
- 프로그래머스
- 프로그래머스 베스트앨범 자바스크립트
- 네트워크
- 알고리즘자바스크립트
- github
- 백준
- 항해99
- 자바스크립트
- 무한스크롤
- cs50
- 프로그래머스 자바스크립트
- python
- 자바스크립트 클로저
- javascript
- 리액트
- 실전프로젝트
- reactquery
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |