Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- sortedBy
- PriorityQueue
- heap
- booleanarray
- 프로그래머스
- lastIndex
- GREEDY
- hackerrank
- Java
- Util
- 2D Array
- 알고리즘
- Developer
- Kotlin
- contentToString
- Main
- foreach
- Poll
- indices
- Recursion
- 동적계획법
- report
- Queue
- dp
- 2020
- programmers
- solution
- dynamic programming
- 코틀린
- intarray
Archives
- Today
- Total
Code in
프로그래머스 큐 다리를 지나는 트럭 with Kotlin 본문
프로그래머스 큐, 다리를 지나는 트럭 문제입니다.
큐는 add 하는 곳과 poll(remove)하는 곳이 다르다는 것을 유의해야 했습니다...
IntelliJ에서의 문제 풀이입니다.
import java.util.Queue
import java.util.LinkedList
// Kotlin은 JVM: Java Virtual Machine 을 사용하기 때문에 Java의 Queue를 import합니다.
var bridge_length:Int = 2
var weight: Int = 10
var truck_weights: IntArray = intArrayOf(7, 4, 5, 6)
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
var answer = 0
data class truck(val weight: Int, var current: Int)
// truck이라는 이름의 weight, current를 가진 구조의 Data를 선언합니다.
val bridge: Queue<truck> = LinkedList<truck>()
// import한 Queue를 LinkedList를 통해 생성합니다.
// 삽입 삭제가 많기 때문에 LickedList가 더 적합할 것 같습니다.
var waitfront = 0 // 기다리고 있는 트럭(truck_weights)의 front Index입니다.
var curweight = 0 // 현재 다리 위에 있는 트럭들의 무게 총 합입니다.
while ( !bridge.isEmpty() || waitfront < truck_weights.size ){
// 다리에 트럭이 있는 경우 or 기다리는 트럭이 있는 경우 실행합니다.
if (waitfront < truck_weights.size && curweight + truck_weights[waitfront] <= weight){
// 기다리는 트럭이 있고, 다음 트럭이 현재 다리 위의 무게에 더해져도 괜찮은 경우 실행합니다.
curweight += truck_weights[waitfront]
// Queue로 데이터가 들어가기 전, 무게를 더해줍니다.
bridge.add(truck(truck_weights[waitfront++], 0))
// Queue bridge에 truck을 추가해줍니다. offer로 대체 가능합니다.
// offer는 용량 초과시 Exception이 아닌 false를 return 합니다.
}
bridge.forEach {it.current++} // bridge에 있는 모든 truck 요소들의 current를 1 더해줍니다.
if (bridge.peek().current >= bridge_length) // 가장 앞의 트럭이 다리를 다 건넜다면
curweight -= bridge.poll().weight // remove는 Queue가 비면 Exception throw해서 poll로 대체합니다.
// poll로 가장 들어간지 오래된 데이터를 빼고 null을 넣으면서 빠져나온 데이터의 weight값을 사용합니다.
answer++ // timer++ 라고 보면 됩니다.
}
answer++
return answer
}
fun main() {
print(solution(bridge_length, weight, truck_weights)) // 8
}
URL: https://programmers.co.kr/learn/courses/30/lessons/42583?language=kotlin
'알고리즘 스터디_문제풀이' 카테고리의 다른 글
프로그래머스 힙 디스크 컨트롤러 with Kotlin (0) | 2020.08.12 |
---|---|
프로그래머스 큐 프린터 with Kotlin (0) | 2020.08.11 |
프로그래머스 큐 기능개발 with Kotlin (0) | 2020.08.11 |
프로그래머스 정렬 H-Index with Kotlin (0) | 2020.08.10 |
프로그래머스 정렬 가장 큰 수 with Kotlin (3) | 2020.08.10 |
Comments