알고리즘

[프로그래머스 Lv2] 카펫 (Python)

lwkejpf 2022. 7. 2. 02:31

 


 

def solution(brown, yellow):
    total = brown + yellow
    num = []
    idx = 3
    
    while (True) :
        if total % idx == 0 :
            if idx > total // idx :
                break
            num.append([total // idx, idx])
        idx += 1
        
    for n in num :
        temp = (n[0]-2)*2 + n[1]*2
        if temp == brown :
            return [n[0], n[1]]
            break

 

그냥 로직만 잘 짜면 금방 해결할 수 있는 문제였다

 

일단 (brown + yellow) 의 약수를 구해주는데,

1과 2는 가로/세로 길이가 될 수 없기 때문에 애초에 idx 를 3으로 초기화시켜줌.

그리고 가로 길이가 세로 길이보다 더 커야 하니까 idx 가 total // idx 보다 커지면 break

 

예를 들어서 (brown + yellow) 가 48일 때,

왼쪽 정수는 idx, 오른쪽 정수는 total // idx 라고 가정하면

 

1 x 48 (x)  -- idx 는 3부터 시작했기 때문에 포함 안 됨

2 x 24 (x) -- idx 는 3부터 시작했기 때문에 포함 안 됨

3 x 16 (o)

4 x 12 (o)

6 x 8 (o)

8 x 6 (x) -- idx 가 더 커지는 경우니까 이때 break

 

 

참고로 temp = (n[0]-2) * 2 + n[1]  * 2 에서

n[0] 은 가로 길이, n[1] 은 세로 길이인데,

중간에 들어있는 yellow 빼고 계산해줘야 하니까

위에처럼 테두리만 따로 계산해준거

 

암튼 brown 개수 계산해서 입력으로 들어온 brown 개수랑 맞아떨어지면 바로 리턴하고 끝 !!