Kotlin/Algorithm Problems

<프로그래머스> 카펫(Lv.2)

re트 2023. 11. 13. 16:21
728x90

https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%B9%B4%ED%8E%AB

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

처음에는 문제를 보고 고민을 했다.

어떻게 접근을 해야하나...

그러다가 주어지는 입력값을 보고 접근법을 떠올렸다.


 

"갈색과 노란색을 더하면 정사각형 또는 직사각형의 개수가 나오는구나

그러면 이걸 최소 세로 길이인 3부터 시작해서 만들어지는 사각형에 들어가는 갈색 또는 노란색의 개수를 체크하면 될 거 같은데?"


 

세로 길이를 기준으로 잡은 이유는 제한 사항 중에 '카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.'라고 되어 있었기 때문이다.

 

이 접근법으로 나온 코드는 다음과 같다.

class Solution {
    fun solution(brown: Int, yellow: Int): IntArray {
        var answer = intArrayOf()
        var totalGrid = brown + yellow

        for (row in 3..totalGrid / 3) {
            if (totalGrid % row != 0) continue

            var temp = totalGrid / row * 2 + (row - 2) * 2
            if (temp == brown) {
                answer += totalGrid / row
                answer += row
                break
            }
        }
        
        return answer
    }
}

(반복문 시작에 조건문이 들어가는 이유는 그냥 totalGrid와 row를 나누기만 하고 진행을 한다면 정사각형이나 직사각형이 아닌 다른 모양의 도형을 가지고 반복문을 진행하여 원하지 않는 결과가 나오기 때문이다.)

반응형