본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv2 카펫(python)

by 개발하는 호랑이 2024. 1. 31.

카펫

풀이

갈색과 노란색의 2가지 색으로 이루어진 카펫의 크기를 구해야 한다.
노란색은 실제로 카펫의 세로 2칸, 가로 2칸을 제외한 길이의 곱 면적이고, 갈색은 노란색을 제외한 즉, 테두리 면적이다.
이를 이용해서 풀이를 하니 다음과 같다.
1. 전체면적 구하기(갈색+노란색)
2. for문을 루트 면적으로 해서 정사각형이 되었을 때 길이까지를 확인하며, 곱하기 면적 중 높이를 먼저 확인하고 이를 바탕으로 너비를 구한다.
3. 구한 높이와 너비를 이용해 height width - brown == (height - 2) (width - 2) 라면 [width, height]로 반환

# 갈색과 노란색의 갯수만으로 카펫의 크기를 구해야한다.

def solution(brown, yellow):
    area = brown + yellow
    # 2개의 수 중 i를 높이, area /i 를 너비로 구해보자.
    for height in range(3, int(area ** 0.5)+1):
        # 면적은 높이*너비, 면적이 높이로 딱 떨어질 때 계산 가능
        if area % height == 0:
            width = area / height
            if height * width -  brown == (height - 2) * (width - 2):
                return width, height

다른 사람 풀이

내가 푼 방식과 거진 동일하다.

def solution(brown, red):
    for i in range(1, int(red**(1/2))+1):
        if red % i == 0:
            if 2*(i + red//i) == brown-4:
                return [red//i+2, i+2]

아래는 그냥.. 근의 공식을 이용해 수학적으로 푼 풀이다.

이런 똑똑한 청년.

import math
def solution(brown, yellow):
    w = ((brown+4)/2 + math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
    h = ((brown+4)/2 - math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
    return [w,h]