문제 설명
문제 해결 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
}
'코딩테스트 준비(kotlin) > 완전탐색' 카테고리의 다른 글
[프로그래머스,kotlin] 소수 찾기 (0) | 2024.07.12 |
---|