Algorithm/프로그래머스
[프로그래머스/Python] 카펫 - Level2
poppy
2021. 5. 18. 11:18
반응형
https://programmers.co.kr/learn/courses/30/lessons/42842
코딩테스트 연습 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과
programmers.co.kr
def solution(brown, yellow):
width, height = 0, 0
for height in range(3, int((brown+4)/2)):
width = ((brown + 4) / 2) - height
if width < height: break;
if yellow == (width - 2) * (height - 2): break;
return [width, height]
이 문제는 완전탐색 문제로 for문을 돌면서 값이 맞는지 확인하면 되는 문제였습니다.
height를 기준으로 for문을 돌렸는데 height값을 특정하면 width를 계산할 수 있으므로 width를 구합니다. 그 다음 구해진 width와 height로 yellow를 계산하고 입력받은 yellow와 같을 때까지 for문을 반복합니다. 값을 찾았다면 반복문이 종료되고 답을 리턴합니다. 조건에서 width >= height 라는 조건이 있어서 이 조건을 확인할 수 있는 if문도 추가하였습니다.
다른 사람의 코드를 보니까 좀 더 간결하게 쓸 수 있는 것 같다. 코드가 이해가긴 하지만 이렇게 생각하는건 어려울 것 같다...
def solution(brown, yellow):
cand = [(yellow//i,i) for i in range(1, int(yellow**.5)+1) if yellow % i == 0]
for m, n in cand:
if (m+2) * (n+2) == brown+yellow:
return [m+2, n+2]
반응형