https://school.programmers.co.kr/learn/courses/30/lessons/42862#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

class Solution {
    fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
        var answer = 0
        var rent = reserve.toMutableList()
        var need = lost.toMutableList()
        var count = 0
        lost.map {
            if (reserve.contains(it)) {
                rent.remove(it)
                need.remove(it)
            }
        }
        need.sort()
        for (i in need) {
            if (rent.contains(i - 1)) {
                count++
                rent.remove(i - 1)
                continue
            }
            else if (rent.contains(i + 1)) {
                count++
                rent.remove(i + 1)
                continue
            }
            else {
                continue
            }
        }
        answer = n - need.size + count 
        return answer
    }
}

 

문제는 그리 어려운 문제가 아니었으나,, 반례 때문에 좀 헤맸다.. 내 코드에서는 테스트 13, 14번의 케이스가 lost 배열을 정렬해주어야 풀린다.  

 

테스트 13, 14 의 반례는 4 [4,2] [3,5] 이다.

 

우선 체육복 여분을 가져온 학생이 도난을 당한 경우를 제하고 도난 당한 학생 배열을 정렬해준 뒤 도난 당한 학생의 값보다 작은 여분 가져온 학생 배열을 우선적으로 찾아주는 방식으로 했다. 시간은 20ms 안쪽으로 나왔다.

+ Recent posts