카펫(programmers 문제) python 풀이

Jipoleon·2021년 5월 26일
0

programmers

목록 보기
3/9
post-thumbnail

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42842

갈색 블록의 갯수 brown과 노란색 블록의 갯수 yellow가 주어졌을 때,

위의 그림과 같이 노란색 블록으로 만든 사각형의 둘레를 갈색 블록으로 다 둘러싼 경우에 전체 사각형의 [가로, 세로]를 리턴하는 문제이다.

내 풀이

def solution(brown, yellow):
    # yellow 블록으로 만들 수 있는 사각형의 경우
    root_yellow = int(yellow ** 0.5)
    for i in range(1, root_yellow + 1):
        if yellow % i == 0:
            if brown == 2 * (i + (yellow / i)) + 4:
                return [int(yellow / i) + 2, i + 2]
    # 만든 사각형의 둘레 길이 + 4가 brown 블록의 갯수와 같은 경우

먼저, yellow 블록으로 만들 수 있는 사각형의 경우를 구한 뒤, 그 사각형의 둘레의 길이 + 4와 brown 갯수가 같은지 확인 후 리턴한다.
노란 사각형의 한 변의 길이가 가장 긴 경우는 yellow이고, 그 다음으로(=두 번째로) 가장 긴 경우는 적어도 루트 yellow 이하이다.
따라서 위와 같이 for문에 root_yellow를 넣어줘서 노란색 블록을 만들고 그 둘레를 갈색 블록으로 채울 수 있는지 확인하여 리턴을 해준다.

결과

profile
I Love AI

0개의 댓글