스택과 큐를 사용해서 문제를 풀라했는데 아직 사용 못해서 나름의 풀이를 사용했음.. 다음문제부터는 여기서 다른 사람 코드 보고 배워서 적용해야겠다.
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
var containerBox = mutableListOf<MutableList<Int>>()
var time = 0
var numberOfTrain = 0 // 들어올 때 하나씩 올려준다. 지금 지나갈 번호
var totalWeight = 0
// 10 11
while (numberOfTrain < truck_weights.size){
println("열차 시작")
if(containerBox.isEmpty()){
val train = mutableListOf<Int>()
train.add(truck_weights[numberOfTrain])
train.add(1)
// 무게 , 지금 위치
totalWeight +=truck_weights[numberOfTrain]
containerBox.add(train)
numberOfTrain ++ // 열차가 올라갔으므로 다음에 올 열차 번호를 올려줌
}else{// 처음이 아니다
if(containerBox[0][1] == bridge_length){ // 지금 맨앞 기차가 나간다.
totalWeight -= containerBox[0][0] // 맨 앞 기차 무게 제거
containerBox.removeAt(0) // 맨 앞열차 삭제
if(totalWeight + truck_weights[numberOfTrain] <= weight && bridge_length>containerBox.size){ // 다음 열차가 올 수 있다.
timeGoes(containerBox) // 하나씩 앞으로 나아감
val train = mutableListOf<Int>()
train.add(truck_weights[numberOfTrain])
train.add(1) // 무게 , 지금 위치
totalWeight +=truck_weights[numberOfTrain]
containerBox.add(train)// 열차를 올림
numberOfTrain ++ // 열차가 올라갔으므로 다음에 올 열차 번호를 올려줌
}else{ // 다음열차가 올 수 없다.
timeGoes(containerBox) // 하나씩 앞으로 나아감
}
}else{ // 맨앞 기차가 나갈 수 없다.
if(totalWeight + truck_weights[numberOfTrain] <= weight && bridge_length>containerBox.size){//다음 열차가 올 수 있다.
timeGoes(containerBox) // 하나씩 앞으로 나아감
val train = mutableListOf<Int>()
train.add(truck_weights[numberOfTrain])
train.add(1) // 무게 , 지금 위치
totalWeight +=truck_weights[numberOfTrain]
containerBox.add(train)// 열차를 올림
numberOfTrain ++ // 열차가 올라갔으므로 다음에 올 열차 번호를 올려줌
}else{// 다음열차가 올 수 없다.
timeGoes(containerBox) // 하나씩 앞으로 나아감
}
}
}
println(totalWeight)
println(numberOfTrain)
println(containerBox)
time ++
}
var answer = 0
return time+bridge_length
}
fun timeGoes(containerBox :MutableList<MutableList<Int>>){
containerBox.indices.forEach {
containerBox[it][1] += 1 // 위치를 하나씩 올려줌
}
}
1. data class와 class의 차이
data class는 말 그대로 data 만을 담기위해 만들어진 클래스 아래의 링크에 설명 너무 잘되있더라.
앱 개발할때도 sealed class사용하는거 연습해야겠다.
[코틀린] 9 .data class, sealed class, enum class
이번에 포스팅할 건 data class와 sealed class, enum class이다. data class와 sealed class는 자바에는 없는 기능이니 주의깊게 살펴보자. data class data class란 데이터만 담기 위한 클래스이다. 사용하는..
kychul98.tistory.com
2. linked list vs list
[자료구조] 배열과 리스트 +ArrayList, LinkedList
이 글은 생활코딩 자료구조 수업을 기초로 정리한 글입니다. opentutorials.org/module/1335 배열 1. 배열이란? : 데이터를 그룹핑해서 관리하는 자료구조 보통 group으로 나누는 행위는 보다 체계적인 관
jinsangjin.tistory.com
3. queue
[안드로이드 | 코틀린] 코틀린으로 Queue 사용해보기
프로젝트에서 요구사항 구현을 위해 코틀린의 Queue 클래스를 활용해보기로 했다. Queue는 기본 java.util 패키지 내에 포함되어 있으며, Queue를 사용하면 IDE가 java.util.* import를 새롭게 추가하는 것
mparchive.tistory.com
4. queue 랑 stack 사용한 코드 대박..
class Solution11 {
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
var answer = 0
val bridgeQueue: Queue<Int> = LinkedList(List(bridge_length){0})
val waitingQueue: Queue<Int> = LinkedList(truck_weights.toList())
while (bridgeQueue.isNotEmpty()) {
answer++
bridgeQueue.poll()
if (waitingQueue.isNotEmpty()) {
if (bridgeQueue.sum() + waitingQueue.peek() <= weight) {
bridgeQueue.add(waitingQueue.poll())
} else {
bridgeQueue.add(0)
}
}
}
return answer
}
}
※느낀점
1. data class를 사용해보자
2. list의 기능을 많이 써보자 (filter,sumBy 등등)
3. map으로 array 접근해서 하나하나 새로운 데이터 클래스로 바꿔주는거 좋은듯
var trackWithPosition = truckWeights.map { TrackPosition(it, 0, false) }
// TrackPosition -> 데이터 클래스로 선언
4. 하나씩 올라가는 걸 나는 fuc으로 만들었는데 그냥 map으로 하면 될것같음 뭐 ,.. 별 차이점은 없겠지만.
5. try catch 로 오류 잡기 무조건 해야됨 .. 연습하자
'코딩테스트(코틀린) 기초부터 연습' 카테고리의 다른 글
프로그래머스 h-index문제 (정렬) (0) | 2021.04.06 |
---|---|
프로그래머스 가장큰수 (0) | 2021.04.05 |
코틀린에서 .map 사용.. 유용함 (0) | 2021.04.05 |
프로그래머스 해쉬문제lv3 (indices,take,flatten,forEachIndexed) (0) | 2021.04.04 |
mutableList와 groupBy, Let, fold (0) | 2021.04.03 |