algorithm
[프로그래머스 LV.2 카펫]
선호하는
2023. 11. 13. 09:00
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
<문제 풀이>
2차방정식을 세워서 풀이하였다. tmp1 변수는 카펫의 넓이를, tmp2 변수는 한 변이 가능한 최대의 길이를 의미한다. 식을 세운 뒤, 1부터 tmp2 까지 반복하면서 만약 i * (tmp2-i)가 tmp1과 일치한다면 그 값을 반환하면 답이 된다.
이 풀이를 조금 더 발전시켜 보자면, tmp2의 1/4부터 시작해서 결과값이 크면 높이와 넓이의 차이를 벌리고, 결과값이 작다면 차이를 좁히면 조금 더 빠르게 풀이되었을 것 같다.
<소스코드>
def solution(brown, yellow):
tmp1 = brown + yellow
tmp2 = brown//2 + 2
for i in range(1, tmp2):
if i * (tmp2 - i) == tmp1:
return tmp2 - i, i
answer = []
return answer