- 연습문제
- 카펫
- Level 2
문제
- 테두리 한 줄은 갈색
- 중앙은 노란색 카펫
- 갈색 격자 수, 노란색 격자 수가 주어질 때
- 가로, 세로 크기를 반환
- 갈색 수 : 8 이상 5000 이하
- 노란색 수 : 1 이상 2,000,000 이하
- 가로 길이 >= 세로 길이
Idea
- 갈색은 테두리 1줄이므로 갈색 격자 수 나누기 2를 하면 가로 + 세로 -2 값이 됨
- 즉 갈색 격자 수 / 2 + 2 → 가로 + 세로
- 풀이 1
- 또한 중간에 노란색 줄이 1개라도 들어가야 하므로 갈색 테두리 길이는 세로와 가로 모두 최소 3의 값을 갖게 됨
- 이때 세로가 더 작거나 같으므로 세로를 3부터 시작해서 가로, 세로 조합을 구할 수 있음
- 또한 그에 따른 노란색의 가로, 세로길이는 (갈색 가로-2, 갈색 세로-2)이므로 노란색의 가로x세로의 값을 비교하여 적합한 갈색의 길이 구하기
- 풀이 2
- 또는 갈색의 가로x세로 연산으로 면적을 구한다음, 갈색 격자 수를 빼기
- 그러면 노란색의 격자 수가 나오는데 그 값이 주어진 노란색 격자 수와 동일한지 비교하여 올바른 길이를 구할 수 있음
Code
Swift
- 풀이 1 로 구현
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
- 풀이 2로 구현
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
'# Algorithm > --- 프로그래머스' 카테고리의 다른 글
[프로그래머스] 교점에 별 만들기 with Swift (0) | 2022.07.01 |
---|---|
[프로그래머스] 피로도 with Swift (0) | 2022.06.30 |
[프로그래머스] H-Index with Swift, Python (0) | 2022.06.30 |
[프로그래머스] 합승 택시 요금 with Swift (0) | 2022.06.27 |
[프로그래머스] 가장 먼 노드 with Swift (0) | 2022.06.23 |