CodingTest/Programers

[programers] 프로그래머스(코틀린) : 체육복

JunJangE 2022. 10. 31. 15:27

문제

 

프로그래머스

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

programmers.co.kr

알고리즘

- 그리디 문제로 문제를 잘 이해했다면 충분히 해결할 수 있을 것이다.

- 우선 체육복을 도난 당한 사람과 여벌이 있는 사람을 체크한다.

- 체육복이 없는 사람은 왼쪽 친구와 오른쪽 친구가 여벌의 체육복이 있다면 빌린다.

- 체육복이 있는 사람을 체크하여 출력한다.

코드

package progrmers.level1

fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
    val 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
}


fun main(){
    solution(5, intArrayOf(2, 4),intArrayOf(1, 3, 5))
    solution(5, intArrayOf(2, 4),intArrayOf(3))
    solution(3, intArrayOf(3),intArrayOf(1))


}

github