[프로그래머스] 카펫 문제풀이 python

mauz·2022년 5월 30일
0
post-thumbnail

🐒 문제

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

✍ 나의 풀이

def solution(brown, yellow):
    b = brown - 4
    height = 1
    
    while True:
        width = (b - (height * 2))//2
        if yellow == width * height:
            return [width+2, height+2]
        height += 1

완전탐색 카테고리의 문제를 풀었다~

규칙성을 찾기위해 머리를 굴리느라 시간이 좀 걸렸다.


🧠 문제 이해

사각형의 네 꼭짓점을 제외한 가로와 세로길이로 안쪽 사각형의 넓이를 구할 수 있다.

세로길이를 1씩 늘리면서 yellow와 안쪽 사각형의 넓이가 같을때를 확인한다.

타일의 개수는 정해져있으니, 세로길이가 증가함에 따라 가로길이가 감소한다.

yellow와 안쪽 사각형의 넓이가 같으면
꼭짓점을 포함해서 [width+2, height+2] 을 리턴한다.

코드

def solution(brown, yellow):
    b = brown - 4	# 바깥 사각형 꼭짓점 네개 없애기
    height = 1		# 세로길이 1부터
    
    while True:
        width = (b - (height * 2))//2
        if yellow == width * height:	# yellow와 안쪽 사각형의 넓이가 같으면
            return [width+2, height+2]	# 꼭짓점을 다시 포함해서 리턴
        height += 1		# 세로길이 1 증가
테스트 1 〉	통과 (0.00ms, 10MB)
테스트 2 〉	통과 (0.00ms, 10MB)
테스트 3 〉	통과 (0.12ms, 10.1MB)
테스트 4 〉	통과 (0.00ms, 10.3MB)
테스트 5 〉	통과 (0.01ms, 10.2MB)
테스트 6 〉	통과 (0.04ms, 10.2MB)
테스트 7 〉	통과 (0.09ms, 10.1MB)
테스트 8 〉	통과 (0.12ms, 10MB)
테스트 9 〉	통과 (0.11ms, 10.2MB)
테스트 10 〉	통과 (0.16ms, 10.1MB)
테스트 11 〉	통과 (0.00ms, 10MB)
테스트 12 〉	통과 (0.00ms, 10MB)
테스트 13 〉	통과 (0.00ms, 10.1MB)

🔍 다른 답안

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]

근의 공식을 이용한 풀이라고한다.. 똑똑스

profile
쥐구멍에 볕드는 날

0개의 댓글