본문 바로가기

TLI/코드카타

2024.06.11 TIL 코트카타 79번(카펫)

    fun solution(brown: Int, yellow: Int): IntArray {
        var lengthYellowRow = yellow
        var lengthYellowColumn = 1

        while (lengthYellowRow >= lengthYellowColumn) {
            val divideToDouble = yellow / lengthYellowColumn.toDouble()

            if(divideToDouble % 1 == 0.0) {

                lengthYellowRow = divideToDouble.toInt()
                val numBrown = (lengthYellowRow * 2) + (lengthYellowColumn * 2) + 4
                if (numBrown == brown)
                    break
            }

            lengthYellowColumn++
        }

        return intArrayOf(lengthYellowRow + 2, lengthYellowColumn + 2)
    }

 

풀이 과정

1. 노란색 칸의 세로 길이 (lengthYellowColumn)를 1씩 증가시켜 가로길이 >= 세로길이 일 때까지 반복문을 돌린다.

2. 세로길이가 될 수 있는 길이를 확인한다.

   2.1. 전체 노란색 칸의 개수(yellow)를 세로 길이로 나눴을 때 딱 떨어지는지 확인한다.

   2.2. 딱 떨어지면 가능한 세로 칸수이므로 그 때의 갈색 칸 개수를 확인한다.

3. 문제의 갈색 칸 개수와 계산한 갈색한 개수가 맞으면 반복문을 나온다.

4. 계산한 노란색 칸의 가로x세로 길이로부터 갈색칸까지 둘러싼 전체 길이를 계산해 리턴한다.

 

포인트

- 노란색의  세로 길이를 1씩 증가시키며 가능한 가로x세로 길이를 확인하는 것