본문 바로가기
코딩테스트 준비(kotlin)/완전탐색

[프로그래머스] 카펫 (kotlin)

by 1chanhue1 2024. 6. 11.

문제 설명

문제 해결 Point

(행- 2) * (열- 2 ) = yellow의 개수이다. 

주어진 brown과 yellow의 합은 전체 카펫의 넓이이다. 그러므로 문제에서 정답인 return의 값은

brown과 yellow의 합의 약수를 구한 뒤, 곱했을 때 합이 되는 수의 조합을 고려하면 된다. 

예를들어 brown : 10 yellow : 2 일 경우 합은 12 

나올 수 있는 경우의 수는 (1, 12) , (2, 6) ,(3, 4) (4, 3) ,(6, 2), (12, 1)  이다. 

일단 가로의 길이가 세로보다 길거나 같다고 제한사항에 있으므로 경우의 수가 (1, 12) , (2, 6) , (3, 4)은 제외한다. 

(4, 3) (6, 2)  (12, 1) 이 조합중에서 , (행-2)*(열-2)=yellow (2) 를 찾으면 (4, 3) 이라는 조합을 도출 할 수 있다.

코드

fun solution_i(brown: Int, yellow: Int): IntArray {
    var answer = intArrayOf()
    
    val area = brown+yellow // 넓이 

    var row =0 // 열 가로
    var column=0  // 행 세로
    for(i in 1..area){
        row=i
        column=area/i

        if((row-2)*(column-2)==yellow) {

            break

        }
    }

    answer=answer+column

    answer=answer+row


    return answer
}