문제
중앙에 노란색, 테두리 갈색 카펫에서 노란색과 갈색 개수만 알고 있을 때, 카펫의 가로 세로 크기를 순서대로 배열에 담아 return 하는 문제
제한 사항
- 갈색 격자의 수 brown은 8이상 5,000 이하인 자연수
- 노란색 격자의 수 yellow는 1이상 2,000,000 이하인 자연수
- 카펫의 가로의 길이는 세로와 같거나 세로보다 길다.
풀이 방법
- 가로 >= 세로 이므로 세로 길이의 최대는 yellow+brown 값의 제곱근
- 노란색 가로 = yellow / 세로
- 노란색 격자를 바탕으로 갈색 격자의 수를 구한 뒤 brown 값과 같으며, yellow % 세로 == 0 이면 카펫의 크기
코드
import kotlin.math.sqrt
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
val h_max = sqrt((brown+yellow).toDouble()).toInt()
var (w, h) = arrayOf(0,0)
for(height in 1..h_max){
var width = yellow/height
if(width < height) break
if(2*(width+2)+2*(height+2)-4 == brown && yellow%height == 0) {
w = width+2
h = height+2
break
}
}
return intArrayOf(w, h)
}
}
'코딩 테스트 > Lv.2' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 with Kotlin (0) | 2024.03.05 |
---|---|
[프로그래머스] K진수에서 소수 개수 구하기 with Kotlin (0) | 2023.11.30 |
[프로그래머스] 괄호 회전하기 with Kotlin (0) | 2023.11.07 |
[프로그래머스] 귤 고르기 with Kotlin (0) | 2023.11.07 |
[프로그래머스] N개의 최소공배수 with Kotlin (0) | 2023.11.07 |