본문 바로가기
Algorithm/문제풀이_프로그래머스

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

by Joahnee 2022. 4. 18.

요구능력

수학

 

문제풀이

우리가 이 문제에서 구해야되는건 width와 height이다.

width와 height 의 곱이 결국 면적이다.

모든 카펫의 면적은 yellow와 brown의 합이다.

그렇다면, width * height = yellow + brown 이라는 것이다.

 

우리는 width와 height를 구해야하는데 면적을 가지고 있다.

그렇다면 완전탐색으로 면적을 한번 구해보자.

width가 전체면적값을 다 차지하지는 않으니까 1부터 S - 1까지만 탐색을 해보는 것이다.

여기서 우리가 탐색할 필요가 없는 부분이 있다.

바로 면적이 width로 나누어 떨어지지 않는 부분이다.

면적 = width * height인데 나누어 떨어지지 않으면 볼 필요도 없다.

그렇다면 width가 들어왔으니 높이를 구해보자면 S = width * height 이니까

height = S / width가 된다.

그리고 문제에서 가로길이가 세로보다 길거나 같다고 했으므로 가로가 더 작다면 continue처리 해준다.

그리고 yellow의 면적은 테두리 한줄이 갈색이기에 (width - 2) * (height - 2)를 해주면 구해집니다.

그렇기에 현재 구한면적의 yellow면적이 주어진 yellow면적과 같다면 정답이 나오게 됩니다.

 

후기

원리만 생각해낸다면 쉬운문제

코드

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    var result = [0, 0]
    let S = brown + yellow
    for width in stride(from: 1, through: S - 1, by: 1){
        if S % width != 0 {continue}
        let height = S / width
        if width < height{continue}
        if (width - 2) * (height - 2) == yellow{
            result = [width, height]
        }
    }
    
    return result
}

댓글