Algorithm/프로그래머스

[프로그래머스] [Python] Level2_카펫

은세라 2021. 8. 5. 04:03

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

1차 시도

def solution(brown, yellow):
    
    # y_width * y_height = yellow
    # (y_width+2) * (y_height+2) = brown + yellow
    # y_width + y_height = brown/2-2
    
    answer = []
    
    for i in range(1, yellow+1): #가로=i, 세로 = yellow/i
        if (i+2)*(yellow/i+2) == brown + yellow and i + yellow/i == brown/2-2:
            answer.append(i)
            answer.append(yellow/i)          
    print(answer)
    
    return answer

2차 시도

def solution(brown, yellow):
    
    s = brown + yellow
    
    for width in range(s, 2, -1): #가로
        if s % width == 0:
            height = s // width #세로
            if yellow == (width-2)*(height-2) : return[width, height]

💡최종로직

1. 전체 갯수 구함

2. 전체 갯수를 기준으로 하나씩 빼면서 가로가 될 수 있는지 검사

  2-1. 전체가 가로로 나누어 떨어지면

  2-2. (가로-2)(세로-2) == yellow이면

  [width, height] return

width값은 전체에서 하나씩 역으로 빼기 때문에 무조건 width가 height보다 크거나 같음