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)
*/