본문 바로가기

TLI/코드카타

2024.05.27 내일배움캠프 Android 4기를 시작하며

4.5개월간의 긴 여정이 오늘 시작됐다.

백엔드를 그만두고 새롭게 시작하는 것이 늦었다고 생각하기 때문에 두렵지만 잘 이겨내고 좋은 직장에 취직할 것이라고 믿는다.

10월에 마무리를 했을 때 후회가 남지 않도록 열심히 하자.

 

---

 

TIL 코트카타 64번(체육복)

    fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {

        var uniformStatus = IntArray(n+1)

        for(reserveNumber in reserve) {
            uniformStatus[reserveNumber] = 1
        }

        var answer = n
        for(lostNumber in lost) {
            if(uniformStatus[lostNumber] == 1)
                uniformStatus[lostNumber] = 0
            else {
                uniformStatus[lostNumber] = 2
                answer--
            }
        }


        for(studentNumber in 1..n) {
            var currentStatus = uniformStatus[studentNumber]
            if(currentStatus == 1) {
                if(uniformStatus[studentNumber - 1] == 2) {
                    uniformStatus[studentNumber - 1] = 0
                    uniformStatus[studentNumber] = 0
                    answer++
                    continue
                }

                if(studentNumber < n && uniformStatus[studentNumber + 1] == 2) {
                    uniformStatus[studentNumber] = 0
                    uniformStatus[studentNumber + 1] = 0
                    answer++
                }
            }
        }
        return answer
    }

 

포인트

- 1번부터 인덱싱을 하면서 앞 번호에서 이미 빌렸을 수 있는 가능성이 있는 사람부터 탐색(그래야 최대한 많이 빌려줄 수 있으므로)

 

ex) XOXOO

O : 여분이 있는 사람

X : 도난 맞은 사람

 

왼쪽에서 오른쪽 방향으로 탐색을 하기 때문에 여분이 있는 사람 기준 왼쪽->오른쪽 순서로 빌려줄 사람을 골라야 최대한 많이 빌려줄 수 있다.