https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 딱 보고 큐를 떠올리긴 했지만 효율적인 구현을 떠올리지 못했다. 다리에 올라간 트럭은 다리 길이만큼 다리에 머무르게 되는데, 이를 어떻게 구현하는게 효율적일지 고민하다가 혼자 힘으로 풀지 못했다. 주요 포인트는 다음과 같다.
- 처음에 다리 길이만큼 0을 넣는다.
- 그리고 다리에 트럭을 올릴 수 있으면(무게가 가능하면) 올린다. 반면 올릴 수 없으면 트럭대신 0을 올린다.
- 즉, 큐에는 0이든 트럭이든 다리 길이만큼의 숫자들이 저장된다. 그리고 매초마다 숫자를 빼고 넣으면 트럭이 다리 길이만큼 다리를 건너는 것을 구현할 수 있다.
직접 적어보면서 해보면 매우 간단하다. 아직까지는 혼자 힘으로 이렇게 유연하게 사고하지 못하는 거 같다.
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> que = new LinkedList<>();
// 다리 길이만큼 0 삽입
for (int i = 0; i < bridge_length; i++) {
que.add(0);
}
int sec = 0;
int sum = 0;
int idx = 0;
while (!que.isEmpty()) {
sec++;
// 빼기
sum -= que.poll();
// 넣기
if (idx < truck_weights.length) {
if (sum + truck_weights[idx] <= weight) {
que.add(truck_weights[idx]);
sum += truck_weights[idx];
idx++;
} else {
que.add(0);
}
}
}
return sec;
}
}
'CS > Algorism' 카테고리의 다른 글
99클럽 코테 스터디 4일차 TIL: [프로그래머스] 주식가격 (0) | 2024.05.23 |
---|---|
[백준] 12865. 평범한 배낭 (0) | 2024.05.23 |
99클럽 코테 스터디 2일차 TIL: [백준] 2179. 비슷한 단어 (0) | 2024.05.21 |
99클럽 코테 스터디 1일차 TIL: [프로그래머스] 베스트앨범 (0) | 2024.05.20 |
[백준] 2240. 자두나무 (0) | 2024.04.22 |