경험의 기록

문제 : programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

 

class Solution {
    fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
        var arr = Array(n+1){1}
        var answer = -1

        // 체육복 도난
        for(i in lost){
            arr[i]--
        } 

        // 여벌의 체육복
        for(i in reserve){
            arr[i]++
        } 

        for(i in 1..n){
            // 체육복이 도난 당했다면
            if(arr[i]==0){
                
                // 왼쪽 친구가 있으면 빌림
                if(arr[i-1] == 2){
                    arr[i-1]--
                    arr[i]++
                } 
                
                // 오른쪽 친구가 있으면 빌림
                else if(i<n){
                    if(arr[i+1] == 2){
                        arr[i+1]--
                        arr[i]++
                    }
                }
            }
        }

        // 체육복을 2개가지고 있는 사람은 하나로 처리
        for(i in arr){
            answer += if (i == 2) 1
            else i
        }

        return answer
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading