알고리즘/프로그래머스

[프로그래머스]Lv.2 카펫(Python)

cha_eyoon 2023. 12. 30. 16:12

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근

 

카펫 관계식 세우기부터 시작(예전에 포기한 문제라 겁..)

 

(1) a >= b

(2) 2a + 2b - 4 = brown

(3) (a-2) * (b-2) = yellow

 

total = brown + yellow

for 반복문을 사용해서 세로가 가능한 길이가 (1 ~ total)

a*b == total   =>  a = total/b

 

a >= b는 문제에 명시되어 있지만 b가 total의 약수여야 한다는 조건을 생각하는게 당연하지만 어려웠다.

그리고 (2) 조건 or (3) 조건을 달면 된다. (다 통과)

 

코드
def solution(brown, yellow):
    answer = []
    total = brown + yellow
    
    # a >= b
    # 2a + 2b - 4 = brown
    # (a-2) * (b-2) = yellow
    
    for b in range(1, total+1):
        a = total / b
        if (total % b == 0) and (a >= b) and ((a-2) * (b-2) == yellow):
            answer.append(a)
            answer.append(b)
    
    
    return answer

 

회고

 

너무 오래 걸렸다. 오히려 a와 b가 주어지고 brown과 yellow를 구하는 건 쉬워 보이지만 반대로 생각하려니까 되게 복잡했다. 그리고 반복문을 작성할 때 a 또는 b를 기준으로 작성하고 범위가 1부터 total까지 가능한 것과 그 안에서 다시 a를 b와 total의 관계식으로 엮어주고 다수의 조건식이 성립할 때의 a와 b를 구하는 점..!!

뭔가 수학을 잘하면 수월할 것 같은 문제?