Daily LeetCode Challenge - 1396. Design Underground System

Min Young Kim·2023년 5월 31일
0

algorithm

목록 보기
159/198

Problem From.

https://leetcode.com/problems/design-underground-system/

오늘 문제는 체크인과 체크아웃 그리고 평균 시간을 구하는 class 와 함수들을 만드는 문제였다.

checkIn 에는 고유 id 를 가지는 사람이 각각의 역에 들어오고
checkOut 에는 고유 id 를 가지는 사람이 도착역에 도착하여 역을 나서게된다.
getAverageTime 에는 각각의 출발역과 도착역 사이의 시간을 계산하게 되는데, 모든 사람의 평균 시간을 구해야 하므로, 그 전까지 해당 노선을 탄 모든 사람의 시간의 평균을 구해야했다.

이를 위해서 map 을 두개 썼는데,
처음 map 에는 각각의 고유 id 와 출발역, 시간을 저장해두었고,
그 다음 map 에는 각각의 (출발, 도착 노선)과 (총 걸린 시간, 횟수) 를 짝지어서 넣어두었다.

마지막으로 getAverageTime 을 하면 출발, 도착 노선이 있는 map 에서 총 걸린 시간 / 횟수를 하여서 반환하여 시스템을 구현하였다.

class UndergroundSystem() {

    val checkMap = mutableMapOf<Int, Pair<String, Int>>()
    val travelMap = mutableMapOf<Pair<String, String>, Pair<Int, Int>>()
    
    fun checkIn(id: Int, stationName: String, t: Int) {
        checkMap[id] = Pair(stationName, t)
    }

    fun checkOut(id: Int, stationName: String, t: Int) {
        
        val pair = checkMap[id]!!
        val direction = Pair(pair.first, stationName)
        
        if(travelMap.containsKey(direction)) {
            val oldPair = travelMap[direction]!!
            travelMap[direction] = Pair(oldPair.first + t - pair.second, oldPair.second + 1)
        }else{
            travelMap[direction] = Pair(t - pair.second, 1)
        }
        
    }

    fun getAverageTime(startStation: String, endStation: String): Double {
        
        val pair = travelMap[Pair(startStation, endStation)]!!
        
        return pair.first.toDouble() / pair.second.toDouble()
        
    }

}

/**
 * Your UndergroundSystem object will be instantiated and called as such:
 * var obj = UndergroundSystem()
 * obj.checkIn(id,stationName,t)
 * obj.checkOut(id,stationName,t)
 * var param_3 = obj.getAverageTime(startStation,endStation)
 */
profile
길을 찾는 개발자

0개의 댓글