본문 바로가기

알고리즘

[ 알고리즘 / kotlin ] 프로그래머스 lv1 체육복

안녕하세요 gyub(귭)입니다 ㅎㅎㅎ

요즘 자소서 작성하고 개인 프로젝트를 하느라 

바빠서 자세히 설명은 못해드리지만 주석을 달아놨습니다!

(원래는 자세하게 했던거처럼 말하지만...  사실 개인 공부 목적이라ㅎ;;)

 

class Solution {
    private lateinit var numberOfClothes: IntArray
    
        fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {

          var answer = 0

    // size: 전체학생수, 가지고 있는 옷 개수 ( 0, 1, 2)
    // 1벌씩 가지고 있다고 초기화
    // -> 여벌 옷을 가진 학생은 하나만 도난 당했다고 가정했으므로
    // -> 여벌옷은 2개를 가진상태로 도난을 당했으면 1벌이므로 자신만 입을 수 있고
    // -> 도난을 당하지 않았으면 2벌을 가졌으므로 1벌을 줄 수 있다.
    numberOfClothes = IntArray(n) { 1 }


    // 여벌 옷 가진 학생들 옷 개수 ++ => 2
    reserve.forEach {
        numberOfClothes[it - 1]++
    }

    // 도난 당한 학생들 옷 개수 -- => 0 or 1
    lost.forEach {
        numberOfClothes[it - 1]--
    }

    // 전체 학생 수 만큼 반복
    for (i in numberOfClothes.indices) {
        // 도난 당한 학생들만 처리하면 되므로 옷이 0개인 학생들만 검사
        if (numberOfClothes[i] == 0) {

            // // 첫번째 학생은 다음 번호 학생하고만 비교
            if (i == 0) {

                // 다음 번호 학생이 여벌의 옷을 가지고 있다면
                // 즉 2벌인 경우에
                if (numberOfClothes[i + 1] == 2) {
                    // 옷을 받으므로 ++ => 1
                    numberOfClothes[i]++
                    // 옷을 빌려주므로 -- => 1
                    numberOfClothes[i + 1]--
                }
                // 마지막 학생은 이전 번호 학생하고만 비교
            } else if (i == numberOfClothes.lastIndex) {

                if (numberOfClothes[i - 1] == 2) {
                    numberOfClothes[i]++
                    numberOfClothes[i - 1]--
                }
                // 왼쪽 번호 학생부터 검사
            } else if (numberOfClothes[i - 1] == 2) {
                numberOfClothes[i]++
                numberOfClothes[i - 1]--

            } else if (numberOfClothes[i + 1] == 2) {
                numberOfClothes[i]++
                numberOfClothes[i + 1]--
            }
        }
    }

    // 여벌의 옷을 가지고 있지만 주지 못하는 경우도 있기 때문에
    // 최종적으로 1벌이나 2벌을 가지고 있는 학생들의 수 대입
    answer = numberOfClothes.count {
        it == 1 || it == 2
    }


    return answer
        }
}

봐주셔서 감사합니다!
질문이나 수정되어야 할 부분이 있다면 댓글로 남겨주세요!

반응형