티스토리 뷰

728x90

https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

  • 해설 :

카펫이 다음과 같이 테두리는 갈색, 속 알멩이는 노란색으로 칠해져 있다. 

갈색 칸의 개수와, 노란색 칸의 개수만을 알고 있을 때 원래 카펫의 가로와 세로 길이를 찾으면 된다. 

 

 

 

  • 풀이 :

문제의 분류가 완전탐색로 구분되어있어 크게 봤을 땐 완전탐색이 맞다. 하지만 수학적인 부분들을 생각하는 것에 시간이 더 걸렸던 것 같다. 먼저 갈색, 노란색 블록의 개수의 합만큼 가로나 세로 길이의 범위가 가능할 수 있기 때문에 가로와 세로 길이가 될 수 있는 후보들을 nums배열에 넣어주었다. 이 때, 블록의 합을 어떤 값으로 나눌 때 나머지가 있는 값이라면 길이 후보들에서 제외하였다.

모든 값 후보들에 대해 테두리의 개수, 즉 갈색 블록의 수가 맞아 떨어지는 가로와 세로 길이 후보를 찾아서 이를 리턴하였다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(brown, yellow):
    answer = []
    nums = []
    for i in range(1,brown+yellow+1):
        if (brown+yellow) % i == 0:
            nums.append(i)
    start = 0
    end = len(nums)-1
    while start <= end:
        if (nums[start] + nums[end]) * 2 - 4 == brown:
            return [nums[end],nums[start]]
        start += 1
        end -= 1
cs
320x100
댓글
© 2022 WonSeok, All rights reserved