본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 카펫 (python)

728x90

풀이 

import math
def solution(brown, yellow):
    answer = []
    length = 0
    for i in range(1, math.trunc(math.sqrt(yellow)) + 1):
        for y in range(1, i + 1):
            if y * (brown/2 - 2 - y) == yellow:
                length = y
                break

    answer.append(brown / 2 - length)
    answer.append(length + 2)
    return answer

내 풀이

 

answer에 들어갈 가로, 세로 길이는 각각 yellow 가로 + 2, yellow 세로 + 2이다. 따라서 yellow의 가로, 세로 길이를 알면 답을 구할 수 있다.

yellow 가로 = x, yellow 세로 = y라고 하면,

x * y = yellow 타일 수, 2(x+1) + 2(y+1) = brown 타일 수가 된다.

따라서 연립 방정식을 세우면,

  • x * y = yellow
  • x + y = brown/2 - 2

이다.

 

 

yellow가 되는 x, y 쌍을 찾기 위해 우선 y부터 찾는다.

y는 yellow의 제곱근보다 작으므로(가로>=세로) math.sqrt(yellow) + 1까지 반복문을 돈다. 소수점을 제거하기 위해 math.trunc도 사용한다.

다음으로 x는, x = brown/2 - 2 - y이므로 y * (brown/2 - 2 - y) = yellow일 때를 찾는다.

 

x, y 쌍을 찾으면 answer에 append해서 답을 반환한다.

반응형