기타/Coding test

[Python] 프로그래머스 level 2. 카펫

SOIT 2022. 11. 14. 19:37

(python)

완전탐색

 

 

문제 파악

길이를 이용하는 문제임: 테두리 1줄은 갈색으로 칠해져 있는

 

결과 도출

def solution(brown, yellow):
	total = brown + yellow # brown, yellow의 합이 전체의 카펫 크기
    for i in range(total, 1, -1) # total~1까지 -1만큼, 가로의 길이를 찾는다. 노란색의 길이
    	if total % i == 0: # 나머지가 0이면
        	a = total // i # 나눈 몫(정수): a
            if yellow == (i-2)*(a-2): #테두리 한 줄은 갈색이니, 배제시키면 -2(가로), -2(세로)
            	return [i,a] #가로,세로

 

다른 풀이

 

1. 완전 탐색

가로 * 세로 = 격자 합, 둘레의 합(가로*2 + 세로*2 - 겹치는부분4) = 갈색 둘레

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]

 

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]
728x90