[프로그래머스] 카펫

cheeeese·2022년 12월 8일
0

코딩테스트 연습

목록 보기
147/151
post-thumbnail

📖 문제

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

💻 내 코드

def solution(brown, yellow):
    answer = []

    size = brown + yellow  # 전체 넓이

    height = [] # 높이가 될 수 있는 값을 담음
    for i in range(1, int(size**(1/2))+1): # 약수 구하기
        if size%i==0:
            height.append(i)

    for i in range(len(height)):
        if (height[i]-2)*((size//height[i])-2)==yellow:
            # 가운데의 넓이가 yellow와 같다면 정답
            answer=[size//height[i],height[i]]
            break

    return answer

💡 풀이

  • brown과 yellow를 더한 값이 카펫의 총 넓이가 됨
  • 직사각형이므로 가로 세로의 값은 넓이의 약수와 같다
  • 가로와 세로는 같거나 가로가 더 길다고 했으므로 넓이의 제곱근까지의 약수를 구한 뒤 짝은 따로 구하지 않음
  • 구해진 값을 돌면서 가운데의 넓이가 yellow의 값과 같다면 정답이 된다

0개의 댓글