다리를 지나는 트럭 (Level2)
link - https://programmers.co.kr/learn/courses/30/lessons/42583
1. 문제 파악하기
- 입력 : 다리 길이 / 다리 감당 가능한 무게 / 지나갈 트럭 리스트
- 출력 : 트럭이 모두 다리를 지나갈때까지 걸리는 시간 출력
- 한 트럭이 다리를 지나갈때는 다리길이만큼의 시간이 소요된다.
- 대기중인 트럭의 무게가 더해졌을때 다리가 감당 가능한 무게를 초과한다면 대기중인 트럭은 올라갈수 없고 대기
2. 아이디어
- Queue를 사용하여 현재 다리에 올라온 트럭들을 관리하자
- Queue에는 Pair 형태의 데이터를 저장할텐데 <트럭의 무게, 현재 위치> 를 저장하자
- go 라는 함수를 작성하는데 q의 트럭들을 한번씩 전진 시키며, 전진후 추가될수있는 길이와 무게를 반환한다
- go 라는 함수를 실행시켜서 현재 대기중인 트럭을 추가시킬수 있으면 큐에 추가한다
- 모든 트럭을 큐에 추가했으면 마지막으로 큐에 모든 트럭이 없어질때까지 실행시킨다
- go 함수가 실행된 횟수가 정답이 된다
3. 풀이
import java.util.*
class Solution {
var q: Queue<Pair<Int, Int>> = LinkedList()
var answer = 0
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
answer = 0
var con = true
truck_weights.mapIndexed { i, inputV ->
con = true
while (con) {
var p = go(bridge_length, weight)
if(p.first > 0 && p.second >= inputV) {
q.add(Pair(inputV, 1))
con = false
}
}
}
while(!q.isEmpty()) {
go(bridge_length, weight)
}
return answer
}
// 더 추가할수 있는 숫자, 무게 리텉
fun go(len: Int, weight: Int): Pair<Int, Int>{
var w = 0
answer++
for(i in 0 until q.size) {
var front = q.poll()
if (front != null && front.second != len) {
q.add(Pair(front.first, front.second+1))
w += front.first
}
}
return Pair(len-q.size, weight-w)
}
}
|
cs |
'Programmers' 카테고리의 다른 글
[Programmers] 튜플 - kotlin (0) | 2021.09.01 |
---|---|
[Programmers] 삼각달팽이 - kotlin (0) | 2021.08.30 |
[Programmers] 소수찾기 - kotlin (0) | 2021.08.18 |
[Programmers] 가장 긴 팰린드롬 - kotlin (0) | 2021.08.11 |
[Programmers] 괄호 회전하기 - kotlin (0) | 2021.07.15 |