문제 정보
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
우선 yellow 값을 소인수분해하여 yellow의 약수를 구합니다. (A * B 형태, A < B)
소인수분해한 각 case에 대하여 brown 값을 구합니다 => (B + 2) * 2 + A * 2
주어진 brown 값과 같은 case의 가로, 세로 크기를 리턴합니다 => [B+2, A+2]
풀이 코드
def getCase(num):
case = []
for i in range(1, 2000001):
if num // i < i:
return case
if num % i == 0:
case.append([num//i, i])
def solution(brown, yellow):
answer = []
yCase = getCase(yellow)
for y, x in yCase:
if (y+2)*2+x*2 == brown:
answer = [y+2, x+2]
return answer
댓글