프로그래머스
2018 KAKAO BLIND RECRUITMENT [1차] 캐시
끝까지 처음처럼
2023. 1. 16. 21:03
728x90
해당 문제는 kotlin 을 지원하지는 않지만, Deque를 공부하던 중 Deque를 연습하기 좋은 문제인 것 같아 풀어봤습니다.
테케 및 유추 할 수 있는 최악의 케이스를 넣어 봤습니다.
fun main() {
var s = System.currentTimeMillis()
val one = solution(3,arrayOf<String>("Jeju", "Pangyo", "Seoul", "NewYork", "LA",
"Jeju", "Pangyo", "Seoul", "NewYork", "LA"))
var e = System.currentTimeMillis()
println("1실행시간: ${(e-s)/1000.0} 결과값 : ${one}")
var s2 = System.currentTimeMillis()
val two = solution(3,arrayOf<String>("Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo",
"Seoul", "Jeju", "Pangyo", "Seoul"))
var e2 = System.currentTimeMillis()
println("2실행시간: ${(e2-s2)/1000.0} 결과값 : ${two}")
var s3 = System.currentTimeMillis()
val three = solution(2,arrayOf<String>("Jeju", "Pangyo", "Seoul", "NewYork", "LA",
"SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"))
var e3 = System.currentTimeMillis()
println("3실행시간: ${(e3-s3)/1000.0} 결과값 : ${three}")
var s4 = System.currentTimeMillis()
val four = solution(5,arrayOf<String>("Jeju", "Pangyo", "Seoul", "NewYork", "LA",
"SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"))
var e4 = System.currentTimeMillis()
println("4실행시간: ${(e4-s4)/1000.0} 결과값 : ${four}")
var s5 = System.currentTimeMillis()
val five = solution(2,arrayOf<String>("Jeju", "Pangyo", "NewYork", "newyork"))
var e5 = System.currentTimeMillis()
println("5실행시간: ${(e5-s5)/1000.0} 결과값 : ${five}")
var s6 = System.currentTimeMillis()
val six = solution(0,arrayOf<String>("Jeju", "Pangyo", "Seoul", "NewYork", "LA"))
var e6 = System.currentTimeMillis()
println("6실행시간: ${(e6-s6)/1000.0} 결과값 : ${six}")
var tempArray = arrayOf<String>()
var count = 0
var tempList = listOf<String>("Jeju", "Seoul", "NewYork", "LA", "SanFranciscoSanFranc",
"Seoul", "RomeRomeRome", "ParisParisParis", "NewYork", "Rome","Jeju", "Seoul",
"NewYork", "LA", "SanFranciscoSanFranc", "Seoul", "RomeRomeRome", "ParisParisParis",
"NewYork", "Rome") // size = 20
while(true){
tempArray = tempArray.plus(tempList[count%20])
count++
if(count == 100000) break
}
//매우 성의 없이 제작한 최악의 케이스
var s7 = System.currentTimeMillis()
val seven = solution(30,tempArray)
var e7 = System.currentTimeMillis()
println("7실행시간: ${(e7-s7)/1000.0} 결과값 : ${seven}")
}
fun solution(cacheSize: Int, cities: Array<String>): Int {
var answer = 0
if(cacheSize == 0) {
return cities.size*5
} else {
var cache = ArrayDeque<String>()
for(i in 1 .. cacheSize){
answer += 5
val city = cities[i-1].uppercase()
cache.addFirst(city)
}
for(i in cacheSize .. cities.size-1){
if(cache.contains(cities[i].uppercase())){
answer += 1
cache.remove(cities[i].uppercase())
cache.addFirst(cities[i].uppercase())
} else {
answer += 5
cache.addFirst(cities[i].uppercase())
if(cache.size > cacheSize) cache.removeLast()
}
}
}
return answer
}
1실행시간: 0.023 결과값 : 50
2실행시간: 0.001 결과값 : 21
3실행시간: 0.0 결과값 : 60
4실행시간: 0.001 결과값 : 52
5실행시간: 0.0 결과값 : 16
6실행시간: 0.0 결과값 : 25
7실행시간: 0.11 결과값 : 100120
상기 문제는 프로그래머스에서 kotlin을 지원하지는 않지만 Deque를 공부하기에 좋았던 문제였습니다.