알고리즘/프로그래머스

[프로그래머스] 파이썬 _ 카펫

이숭간 2021. 7. 7. 11:55
728x90

https://programmers.co.kr/learn/courses/30/lessons/42842?language=python3 

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

문제유형 : 완전탐색

 

 

문제풀이 :

  • yellow가 X일때 만들수있는 사각형의 가로,세로 길이를 모두 구한다. ( 가로가 세로 이상 )
    • ex) X=6이면 (가로,세로)일때 (6,1), (3,2) 인 사각형을 만들수 있다.
  • 위에서 구한 각 경우에 대해서 brown의 개수를 구한다. 
    • 공식 : 노란색 사각형의 길이를 알때 걔를 둘러싼 테두리의 개수 : (가로+세로)*2 + 4 
  • 조건에서 주어진 brown과 같은지 비교하고 같으면 최종 길이를 찾을 수 있다. break
    • 최종길이는 노란색의 가로세로에 각각 +2를 해주면 된다.

 

팁 : 

  • 어떤 숫자의 약수 구하기 : 해당숫자의 제곱근까지만 확인한다! 
    • 제곱근 = int(n ** (1/2)) 

 

 

 

정답코드

def solution(brown, yellow):
    answer = []
    
    hubo_list = get_pair(yellow)
    for i in hubo_list:
        if brown == get_brown(i):
            answer.append(i[1]+2)
            answer.append(i[0]+2)
            break 
    return answer

def get_pair(num):
    # 제곱근까지 확인 
    result = []
    for i in range(1, int(num ** (1/2)) + 1):
        if num%i == 0:
            result.append((i, num//i))
    return result

def get_brown(tuple_):
    a,b = tuple_[0], tuple_[1]
    
    return (a+b)*2 + 4