Algorithm/프로그래머스

[프로그래머스/Python] 카펫 - Level2

poppy 2021. 5. 18. 11:18
반응형

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

def solution(brown, yellow):
    width, height = 0, 0
    
    for height in range(3, int((brown+4)/2)):
        width = ((brown + 4) / 2) - height
        
        if width < height: break;
        if yellow == (width - 2) * (height - 2): break;
    
    return [width, height]

이 문제는 완전탐색 문제로 for문을 돌면서 값이 맞는지 확인하면 되는 문제였습니다.

height를 기준으로 for문을 돌렸는데 height값을 특정하면 width를 계산할 수 있으므로 width를 구합니다. 그 다음 구해진 width와 height로 yellow를 계산하고 입력받은 yellow와 같을 때까지 for문을 반복합니다. 값을 찾았다면 반복문이 종료되고 답을 리턴합니다. 조건에서 width >= height 라는 조건이 있어서 이 조건을 확인할 수 있는 if문도 추가하였습니다.

 

다른 사람의 코드를 보니까 좀 더 간결하게 쓸 수 있는 것 같다. 코드가 이해가긴 하지만 이렇게 생각하는건 어려울 것 같다...

def solution(brown, yellow):
    cand = [(yellow//i,i) for i in range(1, int(yellow**.5)+1) if yellow % i == 0]
    for m, n in cand:
        if (m+2) * (n+2) == brown+yellow:
            return [m+2, n+2]
반응형