본문 바로가기

개발/알고리즘

[프로그래머스] 완전탐색 - 카펫

반응형
 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr


입력 & 출력

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

풀이

노란색은 갈색의 -2 크기이고, 카펫의 크기는 갈색 + 노란색이다
카펫 크기의 공약수를 구한다 
공약수의 첫번째 + i, 마지막 - i 값을 곱해 노란색 값과 일치할 경우 이를 반환한다
+ 공약수 개수가 1일 경우 정사각형이니 위 경우를 반복할 필요는 없다

 

Swift 전체 코드

var array = [Int]()

for i in 2..<(brown + yellow) / 2 + 1 {
    if (brown + yellow) % i == 0 {
        array.append(i)
    }
}

if array.count == 1 {
    array.append(array.first!)
    return array
}

for i in 0..<array.count {
    if (array[i] - 2) * (array[array.count - 1 - i] - 2) == yellow {
        return [array[array.count - 1 - i], array[i]]
    }
}

return array

 

반응형