[프로그래머스] 완전탐색 | 카펫 | Level 2 | 파이썬(Python)

letthem·2025년 1월 12일

CodingTest

목록 보기
7/24
post-thumbnail

문제

문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예

brownyellowreturn
102[4, 3]
81[3, 3]
2424[8, 6]

풀이

이차방정식으로 풀었다 ㅋㅋㅎㅋㅎㅋㅎㅋ

x를 가로, y를 세로라고 생각해보자
brown, yellow 값에서 힌트를 얻었다

( 가로 + 세로 ) 2 에 모서리 4를 뺀 개수가 brown ⬇️
`( x + y )
2 - 4 = brown`

x에 관해 식을 세우면 ⬇️
x = ( brown + 4 ) / 2 - y

x의 양 끝, y의 양 끝을 제외하고 곱한 yellow ⬇️
(x - 2) * (y - 2) = yellow

x에 관해 식을 세우면 ⬇️
x = ( yellow / ( y - 2 )) + 2

두 식을 같다고 놓으면 ⬇️

(brown + 4) / 2 - y = ( yellow / ( y - 2 )) + 2
(brown + 4) / 2 - 2 = ( yellow / ( y - 2 )) + y

(brown + 4) / 2 - 2 = ( yellow / ( y - 2 )) + y
~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~
이 값을 temp 라고 두고    이 값을 temp2 라고 둔다.

temp와 temp2 가 같아질 때까지 while 문을 돌면서 y값을 하나씩 증가시키며 y값을 찾는다.
y값은 최소 3이므로 초기화를 다음과 같이 해준다.

구해진 y로 x값을 찾아주면 된다.

def solution(brown, yellow):
    arr = []
    
    # x * 2 + y * 2 - 4 = brown
    # (x - 2) * (y - 2) = yellow
    
    temp = int((brown + 4) / 2 - 2)
    
    # 초기화
    temp2 = 0
    y = 2
    
    #temp 끼리 같아질 때까지 돌면서 y값 찾기
    while temp2 != temp:
        y = y + 1 # y값 증가
        temp2 = ( yellow / ( y - 2 )) + y
        
    # y값으로 x값 찾기
    x = int(( brown + 4 ) / 2 - y)
    
    arr.append(x)
    arr.append(y)
    
    return arr

0개의 댓글