[Kotlin] Korean Coding Test - Programmers - Carpet
KotlinQuestion
Leo went to buy a carpet and saw a grid-shaped carpet painted yellow in the center and a row of borders brown, as shown in the picture below.
Leo came home and remembered the number of yellow and brown colored gratings on the carpet he had seen earlier, but not the size of the whole carpet.
When the number brown of brown grids and the number yellow of yellow grids are given as parameters in the carpet, write the solution function so that the width and length of the carpet are arranged in order and returned.
Restrictions
The brown number in the brown lattice is a natural number that is not less than 8 but not more than 5,000.
Yellow in the yellow grid is a natural number of 1 or more and less than 2,000,000.
The horizontal length of the carpet is equal to or longer than the vertical length.
Input/Output Example
Input/Output Example #1
- Input
- brown: 10
- yellow: 2
- Output: [4, 3]
Input/Output Example #2
- Input
- brown: 8
- yellow: 1
- Output: [3, 3]
Input/Output Example #3
- Input
- brown: 24
- yellow: 24
- Output: [8, 6]
Solve
Total area = width × length = brown + yellow
circumference half = width + length = brown / 2 + 2
Yellow area = (width - 2) x (length - 2)
Brown Area = Total Area - Yellow Area
Code
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
val answer = IntArray(2)
val totalArea = brown + yellow // width * height
val halfLap = brown / 2 + 2 // width + height
// Reduce the length of "width + length" by 1 and check only the size that satisfies "width >= height".
for (width in halfLap - 1 downTo halfLap / 2) {
// Dividing the entire area by the horizontal length yields a vertical length.
if (totalArea % width != 0) continue
// Verification
val height = halfLap - width
val yellowArea = (width - 2) * (height - 2)
val brownArea = totalArea - yellowArea
if (brownArea == brown && yellowArea == yellow) {
answer[0] = width
answer[1] = height
break
}
}
return answer
}
}
TEST 1 〉 Pass (0.01ms, 61.4MB)
TEST 2 〉 Pass (0.01ms, 61.8MB)
TEST 3 〉 Pass (0.02ms, 62.4MB)
TEST 4 〉 Pass (0.01ms, 61.8MB)
TEST 5 〉 Pass (0.01ms, 60.4MB)
TEST 6 〉 Pass (0.02ms, 60.6MB)
TEST 7 〉 Pass (0.02ms, 61.4MB)
TEST 8 〉 Pass (0.04ms, 60.9MB)
TEST 9 〉 Pass (0.02ms, 60.4MB)
TEST 10 〉 Pass (0.04ms, 59.7MB)
TEST 11 〉 Pass (0.01ms, 57.6MB)
TEST 12 〉 Pass (0.01ms, 59.2MB)
TEST 13 〉 Pass (0.01ms, 62MB)