프로그래머 Lv.2 – 카페트

문제 설명

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

코드 구현

  • 알고리즘 유형: 철저한 검색
  • 시간 복잡도: O(N) 아마도?
def solution(brown, yellow):
    answer = ()
    yellow_x = 0
    yellow_y = 0

    for i in range (1,yellow+1): #옐로우의 갯수만큼 반복문을 돌린다
        if yellow % i == 0: #옐로우의 갯수가 i로 나누어 떨어질 경우
            yellow_x = int(yellow / i) #옐로우를 i로 나눈 몫이 yello의 가로 길이가 되며
            yellow_y = i #옐로우의 세로 길이는 i가 된다
            if (yellow_x * 2 + yellow_y *2) + 4 == brown:
                answer.append(yellow_x+2)
                answer.append(yellow_y+2)
                return sorted(answer, reverse = True)
            
    return answer

해결 방법

  • 결정적인


러그가 길이보다 너비가 같거나 긴 (직사각형) 구조를 가지고 있다는 점을 고려하면 논리는 다음과 같습니다.

(노란색의 너비(행)*2 + (노란색의 길이(열))*2 +4 = 갈색

갈색 길이 + 2 = 깔개 길이

갈색 너비 + 2 = 카펫 너비

따라서 yellow_x(=노란색 너비)*2 + yellow_y(=노란색 세로)*2)+4 == 갈색이면 노란색의 가로 세로 값을 사용

응답 배열에서 Borwn의 너비(yellow_x+2) 및 아래에서 수직으로(황색)붙이다,

내림차순으로 출력합니다.

(카펫의 길이가 길이보다 크거나 같다는 문제에 한계가 있기 때문에

큰 값은 가로로, 작은 값은 세로로 해야 하기 때문입니다.)