카펫
풀이
갈색과 노란색의 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]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 LV1 최댓값 구하기 (MySQL) (0) | 2024.01.31 |
---|---|
프로그래머스 Lv1 가격이 제일 비싼 식품의 정보 출력하기 (MySQL) (0) | 2024.01.31 |
프로그래머스 Lv2 N개의 최소공배수 (python) (1) | 2024.01.31 |
프로그래머스 Lv2 기능개발 (python) (0) | 2024.01.31 |
프로그래머스 Lv2 프로세스(python) (1) | 2024.01.30 |