Level 2. 카펫

Pear_Mh·2021년 7월 27일
0

Programmers-Level 2.

목록 보기
38/40

카펫

코딩테스트 연습 > 완전탐색 > 카펫

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



문제 구상

  • 입력: brown의 갯수와 yellow 의 갯수
  • 구상(1): 근의 공식 이용
    1. brown의 갯수는 카펫의 둘레, brown+yellow는 카펫의 넓이이다.
    2. 근의 공식을 이용한다.
  • 구상(2):
    1. rows가 brown+yellow인 경우부터 2 까지 -1씩 내려가며,
    2. brown+yellow 가 rows로 나누어 떨어질 때, cols를 구한다. 이때 해당 조건을 만족하는 케이스가 여럿일 수 있으므로, rows-2 * cols-2 가 yellow의 갯수인 경우 출력한다.

문제 풀이

첫번째 시도: 완전탐색

for rows in range(brown+yellow,2,-1):
    if (brown+yellow) % rows == 0:
        cols = (brown+yellow) // rows
        if (rows-2) * (cols-2) == yellow and rows>=cols:
            [rows,cols]

두번째 시도: 근의 공식

# 2nd trial
# input values
brown, yellow = 10,2
# We can consider that brown+yellow = area and brown = perimeter
rows = ((brown+4)/2 + (((brown+4)/2)**2-4*(brown+yellow))**0.5)/2
cols = ((brown+4)/2 - (((brown+4)/2)**2-4*(brown+yellow))**0.5)/2
[rows,cols]

전체 코드

완전탐색

# 1st trial
def solution(brown, yellow):
    alls = brown+yellow
    for rows in range(alls,2,-1):
        if alls % rows == 0:
            cols = alls // rows
            if (rows-2)*(cols-2) == yellow:
                return [rows,cols]

# Code test

brown, yellow = 10, 2
solution(brown, yellow)

근의 공식

# 2nd trial
def solution(brown,yellow):
    rows = ((brown+4)/2 + (((brown+4)/2)**2-4*(brown+yellow))**0.5)/2
    cols = ((brown+4)/2 - (((brown+4)/2)**2-4*(brown+yellow))**0.5)/2
    return [rows,cols]
    
# Code test

brown, yellow = 10, 2
solution(brown, yellow)
profile
Beyond the new era.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN