Better Code, Better Life

카펫 - 프로그래머스 - 파이썬 풀이 본문

Coding Test/Programmers

카펫 - 프로그래머스 - 파이썬 풀이

심재훈 2019. 8. 26. 20:58

문제 풀이

  1. 전체 카펫 수를 구합니다.

  2. 1번에서 구한 값의 약수를 구합니다.

  3. 가로와 세로의 길이를 약수, 전체 카펫수 // 약수로 정하고 조건에 맞는지 확인합니다.

  4. 조건에 맞으면 가로길이가 세로길이보다 크거나 같게 바꿔줍니다.

클린 코드 작성법

  1. 로직별로 함수를 나눕니다.
    1. get_factors
    2. check
  2. for문 내에는 is_correct_factor같이 boolean 변수를 만들고 이를 판정하는 함수로 처리하는것이 좋습니다.

해답 코드

def solution(brown, red):
    total = brown + red
    factors = get_factors(total)
    width, height = 0, 0
    for factor in factors:
        width, height = factor, total // factor
        size = width*height
        boarder = 2*width + 2*(height-2)
        if size - boarder == red:
            break
    if width < height:
        width, height = height, width
    answer = [width, height]
    return answer

def get_factors(target):
    result = set([])
    root_of_target = int(target**0.5)
    for candidate in range(1, root_of_target + 1):
        if target % candidate == 0:
            result.add(candidate)
            result.add(target//candidate)
    return result

 

도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!

 

 

문제 링크

 

코딩테스트 연습 - 카펫 | 프로그래머스

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 모서리는 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수

programmers.co.kr

 

Comments