https://programmers.co.kr/learn/courses/30/lessons/42842
def solution(brown, yellow):
panel = brown + yellow
answer = []
for width in range(3, panel+1):
if ((width-2) * ((panel // width) -2) == yellow):
# height 값
answer.append(panel // width)
# width 값
answer.append(width)
break
return answer
# brown + yellow = width * height
# (width-2) * (height-2) = yellow
# 공식을 그대로 코드로 구현, 저장할 때 큰 값 먼저 저장
문제 해결 Point
해당 문제는 주어진 brown, yellow를 보고 width, height를 구하는 공식을 도출해내는 것이 중요하다.
- 총 블럭의 개수 = brown + yellow = width * height 가 된다. -> 총 블럭 // width = height
- yellow = (width-2) * (height-2) 가 된다. -> 테두리 1줄이 갈색으로 둘러져 있기 때문에 가능
- 가장 최소의 width는 yellow가 1인 경우이므로 3이 된다.
그럼 위의 코드를 순서대로 풀어 설명해보겠다.
- width가 되는 최솟값인 3부터 총 블럭의 개수까지 순회를 하며 widht, height 값을 구한다.
- 이 때 위에 적은 공식에 부합하는 값일 경우에 더 큰값(height)을 먼저 저장하고 나머지 width도 저장한다.
- 조건을 일치하면 반복문을 종료한다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]입국심사 - 이분탐색 (0) | 2021.10.11 |
---|---|
[프로그래머스]8주차_최소직사각형 - 위클리 챌린지 (0) | 2021.10.11 |
[프로그래머스]소수 찾기 - 완전탐색 (0) | 2021.10.11 |
[프로그래머스]모의고사 - 완전탐색 (0) | 2021.10.11 |
[백준]15649번 N과 M (1) - 백트래킹 (0) | 2021.02.26 |