0%

[프로그래머스] 카펫

프로그래머스 - 완전 탐색

Code (Python)

  • 가로가 x, 세로가 y일 때 red는 x*y, 전체 크기(brown+red)는 (x+2) * (y+2)
  • x*y > red인 경우는 문제의 조건에 안 맞는 것이니 break
  • 참고로 brown은 2(X+Y)+4로 구할 수 있다.
1
2
3
4
5
6
7
def solution(brown, red):
for y in range(1, red + 1):
for x in range(y, red + 1):
if x * y == red and (x + 2) * (y + 2) == brown + red:
return [x + 2, y + 2]
elif x * y > red:
break

다른 사람의 코드 1

  • 이중 for문 쓸 필요 없이, red가 i로 나누어 떨어지는 경우 brown값을 구해보면 된다.
  • for문의 범위는 int(red**(1/2))+1
1
2
3
4
5
def solution(brown, red):
for i in range(1, int(red**(1/2))+1):
if red % i == 0:
if 2*(i + red//i) == brown-4:
return [red//i+2, i+2]

다른 사람의 코드 2

  • 전체 크기만큼 반복문을 돌린다.
  • brown 값이 아닌 red 값으로 정답을 찾는 방식
1
2
3
4
5
6
7
8
def solution(brown, red):
nm = brown + red
for n in range(1, nm+1):
if nm%n != 0:
continue
m = nm//n
if (n-2)*(m-2) == red:
return sorted([n, m], reverse = True)