알고리즘/프로그래머스
[프로그래머스]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를 구하는 점..!!
뭔가 수학을 잘하면 수월할 것 같은 문제?