fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
val lostP = mutableListOf<Int>()
val reserveP = reserve.toMutableList()
lost.forEach {
if (reserve.contains(it)) {
reserveP.remove(it)
}else{
lostP.add(it)
}
}
val lostDeafault = lostP.map { it }
if(n>1){
lostP.indices.forEach {
val value = lostDeafault[it]
if(value == 1 ){ // 처음원소
if(reserveP.contains(2)){
lostP.remove(1)
reserveP.remove(2)
}
}
else if (value in 2..n-1){
if(reserveP.contains(value-1)){
lostP.remove(value)
reserveP.remove(value-1)
}else if(reserveP.contains(value+1)){
lostP.remove(value)
reserveP.remove(value+1)
}
}else{
if(reserveP.contains(value-1)){
lostP.remove(value)
reserveP.remove(value-1)
}
}
}
return n - lostP.size
}else if (n ==1){
if(lostP.contains(1)) {
return 0
}else{
if(reserve.contains(1)){
return 1
}else{
return 0
}
}
}else{
return 0
}
}
매우 긴 나의 풀이
fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
var answer = n
var lostSet = lost.toSet() - reserve.toSet()
var reserveSet = (reserve.toSet() - lost.toSet()) as MutableSet
for (i in lostSet) {
when {
i + 1 in reserveSet -> reserveSet.remove(i + 1)
i - 1 in reserveSet -> reserveSet.remove(i - 1)
else -> answer--
}
}
return answer
}
다른 사람의 풀이
풀이의 논리는 같지만 완전 다른 풀이.. 배우고 갑니다.
set에 관하여
형식마다 속도가 다 다른데 이거에 대해서는 좀 많이 찾아봐야겠다. 일단 set은 중복표현이 안되고
hash 는 내부적 키와 벨류를 가지므로 검색이 빠르군
fun main(args: Array<String>) {
val a = setOf<Int>(1,2,3,4,5)
val b = setOf<Int>(1,1,2,2,3,3,11,13,15)
println(a-b)
}
//[4,5]
중복된것도 사라지고 a 기준으로 중복되는것만 삭제되니까 유용하게 쓸 수 있을듯?
'코딩테스트(코틀린) 기초부터 연습' 카테고리의 다른 글
프로그래머스 탐욕법 섬연결하기 (0) | 2021.04.10 |
---|---|
프로그래머스 탐욕법 큰수만들기 (0) | 2021.04.09 |
프로그래머스 소수찾기 (0) | 2021.04.08 |
프로그래머스 디스크컨트롤러 힙(Heap) (0) | 2021.04.08 |
프로그래머스 디스크컨트롤러 힙(Heap) (0) | 2021.04.06 |