문제
- 갈색 격자 수, 노란색 격자 수가 주어질 때
- 가로, 세로 크기를 반환
- 갈색 수 : 8 이상 5000 이하
- 노란색 수 : 1 이상 2,000,000 이하
- 가로 길이 >= 세로 길이
Idea
- 갈색은 테두리 1줄이므로 갈색 격자 수 나누기 2를 하면 가로 + 세로 -2 값이 됨
- 즉 갈색 격자 수 / 2 + 2 → 가로 + 세로
- 풀이 1
- 또한 중간에 노란색 줄이 1개라도 들어가야 하므로 갈색 테두리 길이는 세로와 가로 모두 최소 3의 값을 갖게 됨
- 이때 세로가 더 작거나 같으므로 세로를 3부터 시작해서 가로, 세로 조합을 구할 수 있음
- 또한 그에 따른 노란색의 가로, 세로길이는 (갈색 가로-2, 갈색 세로-2)이므로 노란색의 가로x세로의 값을 비교하여 적합한 갈색의 길이 구하기
- 풀이 2
- 또는 갈색의 가로x세로 연산으로 면적을 구한다음, 갈색 격자 수를 빼기
- 그러면 노란색의 격자 수가 나오는데 그 값이 주어진 노란색 격자 수와 동일한지 비교하여 올바른 길이를 구할 수 있음
Code
Swift
import Foundation
func solution(_ brown:Int, _ yellow:Int) -> [Int] {
let brown_half = brown / 2 + 2
var col = 3
var row = brown_half - col
while col <= row {
let (y_row, y_col) = (row-2, col-2)
if y_row * y_col == yellow { break }
col += 1
row -= 1
}
return [row, col]
}
Python
def solution(brown, yellow):
answer = []
len = brown // 2 + 2
for col in range(1, len // 2 + 1):
row = len - col
yellowArea = row * col - brown
if yellow == yellowArea:
answer = [row, col]
break
return answer