프로그래머스
[프로그래머스][Summer/Winter Coding(~2018)][Kotlin]배달
끝까지 처음처럼
2023. 2. 8. 21:51
728x90
class Solution {
var townMap = mutableMapOf<Int,MutableList<Int>>()
var townTime = mutableMapOf<MutableList<Int>,Int>()
private var timeMap = mutableMapOf<Int,Int>()
fun solution(N: Int, road: Array<IntArray>, k: Int): Int {
var answer = 0
var visited = BooleanArray(N+1){true}
road.forEach{
var tempList = mutableListOf<Int>()
tempList.add(it[0])
tempList.add(it[1])
tempList.sort()
if(townMap.containsKey(it[0])){
var temp = townMap.get(it[0])!!
temp.add(it[1])
temp.sort()
townMap.put(it[0],temp)
}else{
var temp = mutableListOf<Int>()
temp.add(it[1])
townMap.put(it[0],temp)
}
if(townMap.containsKey(it[1])){
var temp = townMap.get(it[1])!!
temp.add(it[0])
temp.sort()
townMap.put(it[1],temp)
}else{
var temp = mutableListOf<Int>()
temp.add(it[0])
townMap.put(it[1],temp)
}
if(townTime.containsKey(tempList)){
if(townTime.get(tempList)!! > it[2]){
townTime.put(tempList,it[2])
}
} else {
townTime.put(tempList,it[2])
}
}
townTime.put(mutableListOf<Int>(0,1),0)
val start = townMap.get(1)!!
visited[1] = false
for(i in 0 .. start.size-1){
dfs(start[i],1, visited, townMap, townTime, 0)
}
answer = timeMap.values.toList().count{e -> e <= k} + 1
return answer
}
private fun dfs(visit: Int, started: Int, visited: BooleanArray,
townMap: MutableMap<Int,MutableList<Int>>,
townTime: MutableMap<MutableList<Int>,Int>, time: Int){
var visitedArray = visited
visitedArray[visit] = false // 방문기록 남기기
var visitedTime = townTime.get(mutableListOf(visit,started).sorted())!! + time // 여기까지 도착한 시간
if(timeMap.containsKey(visit)){ // 시간 비교하여 짧은 시간 갱신
if(timeMap.get(visit)!! > visitedTime){
timeMap.put(visit,visitedTime)
} else {
return
}
} else {
timeMap.put(visit,visitedTime)
}
val visitedList = townMap.get(visit)!!.distinct().filter{it != 1}
for(i in 0 .. visitedList.size-1){
visitedArray[visitedList[i]] = true
if(visitedArray[visitedList[i]]){
dfs(visitedList[i],visit,visitedArray,townMap,townTime,visitedTime)
}
}
}
}
DFS공부하던 중 해당문제를 발견하여 풀어보았습니다.
아직 공부부족이라 썻다 지웠다를 몇번을 반복했는지 모르겠습니다ㅠㅜ
아직까지 대략적인 틀은 잡았지만 세부적으로 원활하게 제가 다룰 수 없는 느낌입니다.
상기코드는를 작성 후 무사히 통과 후 다른사람들의 코드를 보았는데 저는 이제 막 걸음마를 시작한 아기레벨 같다는 느낌이 들었습니다. 다른사람의 통과 코드를 한번 실행해 보았는데 실행시간부터가 매우 차이가 나는 것을 보고 충격을 좀 쎄게 받았던 것 같습니다.
추후 더욱 다양한 알고리즘 등을 공부하여 해당 문제를 깔끔하게 다시 작성 할 수 있도록 하겠습니다.
아래는 실행 결과 입니다.
테스트 1 〉 | 통과 (19.66ms, 63.7MB) |
테스트 2 〉 | 통과 (17.53ms, 62.9MB) |
테스트 3 〉 | 통과 (24.35ms, 62.6MB) |
테스트 4 〉 | 통과 (21.69ms, 62.9MB) |
테스트 5 〉 | 통과 (21.23ms, 63.1MB) |
테스트 6 〉 | 통과 (31.18ms, 63.2MB) |
테스트 7 〉 | 통과 (19.69ms, 63.8MB) |
테스트 8 〉 | 통과 (16.68ms, 63.5MB) |
테스트 9 〉 | 통과 (20.40ms, 63.7MB) |
테스트 10 〉 | 통과 (18.81ms, 63.5MB) |
테스트 11 〉 | 통과 (18.97ms, 63MB) |
테스트 12 〉 | 통과 (19.20ms, 64.2MB) |
테스트 13 〉 | 통과 (29.45ms, 63.7MB) |
테스트 14 〉 | 통과 (140.97ms, 108MB) |
테스트 15 〉 | 통과 (261.27ms, 116MB) |
테스트 16 〉 | 통과 (25.75ms, 63.6MB) |
테스트 17 〉 | 통과 (26.45ms, 63MB) |
테스트 18 〉 | 통과 (75.93ms, 93.5MB) |
테스트 19 〉 | 통과 (260.43ms, 120MB) |
테스트 20 〉 | 통과 (59.88ms, 90.5MB) |
테스트 21 〉 | 통과 (273.72ms, 111MB) |
테스트 22 〉 | 통과 (83.45ms, 91.9MB) |
테스트 23 〉 | 통과 (242.14ms, 118MB) |
테스트 24 〉 | 통과 (206.45ms, 114MB) |
테스트 25 〉 | 통과 (361.40ms, 199MB) |
테스트 26 〉 | 통과 (290.54ms, 179MB) |
테스트 27 〉 | 통과 (256.58ms, 123MB) |
테스트 28 〉 | 통과 (251.56ms, 170MB) |
테스트 29 〉 | 통과 (297.50ms, 185MB) |
테스트 30 〉 | 통과 (133.86ms, 103MB) |
테스트 31 〉 | 통과 (18.95ms, 64.4MB) |
테스트 32 〉 | 통과 (39.01ms, 73MB) |