본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬] 카펫 (완전탐색 / level 2)

by 청량리 물냉면 2022. 12. 28.
반응형
문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

코드
def solution(brown, yellow):
    answer = []
    for i in range(3, int((brown + yellow)**0.5)+1):
        if (brown + yellow) % i == 0 and (i-2) * (((brown+yellow) // i) - 2) == yellow:
                answer = [(brown+yellow) // i, i]
                return answer

 

 

코드 설명

  1. 입출력 예의 규칙을 살펴보면 리턴 값은 brown과 yellow를 더한 값의 약수이다.
  2. yellow의 최솟값이 1이고 전체 카펫의 가로 세로 크기는 최소 3, 3이기 때문에(예시2가 카펫의 최소 크기), 반복문은 3부터 시작하도록 코드를 작성했다.
  3. 반복문 안에서 두 수의 합의 약수를 찾고 해당 약수를 이용한 가로X세로 크기가  yellow 크기와 일치하는지 확인한다.
    • yellow의 크기: 가로 X 세로 ☞ (전체 크기의 가로 -2) X (전체 크기의 세로 -2)
  4. 조건문에 일치하는 i를 찾았으면, brown + yellow를 i로 나눈 몫과 i 값을 차례로 배열에 넣어 리턴한다.
    • 루프를 루트보다 작거나 같은 값 안에서 돌았기 때문에 i보다 brown + yellow // i가 더 크다. 문제의 조건에 따라 brown + yellow // i를 앞쪽에 배치한다.

 

반응형