요구능력
수학
문제풀이
우리가 이 문제에서 구해야되는건 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
}
'Algorithm > 문제풀이_프로그래머스' 카테고리의 다른 글
[Swift][프로그래머스][그리디] 체육복 (0) | 2022.04.20 |
---|---|
[Swift][프로그래머스][해시] 베스트앨범 (0) | 2022.04.19 |
[Swift][프로그래머스][완전 탐색] 소수 찾기 (0) | 2022.04.18 |
[Swift][프로그래머스][완전탐색] 모의고사 (0) | 2022.04.18 |
[Swift][프로그래머스][정렬] H-Index (0) | 2022.04.13 |
댓글