[231215] Today I Learned

YoungHyun Kim·2023년 12월 15일
1

TIL ✍️

목록 보기
20/68

[프로그래머스] 카펫

문제


Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

풀이

  1. 모든 카펫의 갯수의 제곱근이 정수이면, [제곱근, 제곱근] 형태의 배열을 반환하는 함수를 작성하면 된다.
  2. 제곱근이 정수가 아니라면 제곱근에 가까운 정수인 약수를 찾아야 한다.
  3. 정수인 약수를 찾고 x, y라고 칭하면, (x-2) * (y-2) 가 노란색 격자의 수와 같아야 한다.
  4. 조건에 맞는 x, y를 반환하면 문제가 해결된다.
import Foundation

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    let total = brown + yellow
    var x = 0, y = 0, result = [Int]()
    for i in 1...total {
        if total % i == 0 {
            x = i
            y = total / i
            
            if (x - 2) * (y - 2) == yellow {
                break
            }
        }
    }
    result = [x, y]
    return result.sorted(by: >)
}


profile
iOS 개발자가 되고 싶어요

0개의 댓글