문제

프로그래머스 - 카펫

풀이

import math


def solution(brown, red):
    area_candidate = []

    total = brown + red
    for i in range(1, int(math.sqrt(total)) + 1):
        if total % i == 0:
            area_candidate.append((total // i, i))

    for x, y in area_candidate:
        if (x - 2) * (y - 2) == red:
            return [x, y]

해설

  1. 갈색과 빨간색의 격자수를 모두 더한 total의 제곱근만큼 돌면서 카펫의 높이와 넓이를 만들 수 있는 후보군 리스트를 만든다.
  • 피드백 : math.sqrt()를 "**0.5"로도 사용가능
  1. (가로 - 2) * (세로 - 2)는 곧 빨간색 격자의 개수와 같다.
  2. 후보군 리스트를 돌며 빨간색 격자가 (가로 - 2) * (세로 - 2) 와 같은지 확인한다.
  3. 같으면 가로 세로의 쌍을 리턴.
profile
지(치지않고)꾸(준히)열(심히)

0개의 댓글