[알고리즘] 프로그래머스 - 카펫

Evan·2025년 3월 31일

알고리즘

목록 보기
5/10

카펫


문제 설명

갈색과 노란 타일의 개수가 주어졌을 때, 카펫의 전체 타일 수와 모양을 이용하여 카펫의 가로와 세로 길이를 구하는 문제이다.

카펫은 가장자리가 갈색 타일로 둘러싸여 있고, 내부는 노란 타일로 채워져 있다.
예를 들어, 갈색 타일이 10개, 노란 타일이 2개일 경우, 카펫의 가로 길이는 4, 세로 길이는 3이 되어 [4, 3]을 반환한다.

제한 사항

  • 갈색 타일의 개수는 8 이상 5,000 이하
  • 노란 타일의 개수는 1 이상 2,000,000 이하
  • 카펫의 가로, 세로 길이는 모두 3 이상이며, 가로 길이는 세로 길이보다 크거나 같다.



내가 접근한 방법


전체 타일 수(갈색 + 노란)를 이용하여 가능한 가로와 세로 길이의 조합(약수 쌍)을 구한다.
각 조합에 대해 갈색 타일의 개수 2*x + 2*y - 4와 노란 타일의 개수 (x - 2) * (y - 2)를 계산하여 주어진 조건에 맞는 조합을 찾아 반환한다.

import Foundation

func solution(_ brown: Int, _ yellow: Int) -> [Int] {
    let xy = brown + yellow
    var divisor: [Int] = []
    
    for num in 1...xy {
        if xy % num == 0 {
            divisor.append(num)
        }
    }
    
    for num in divisor[(divisor.count/2)...] {
        let x = num
        let y = xy / num
        
        if 2*x + 2*y - 4 == brown && (x-2)*(y-2) == yellow {
            return [x, y]
        }
    }
    
    return []
}
profile
iOS 개발자

0개의 댓글