happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (300)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (53)
      • DevOps (3)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 18
  • kubernetes
  • 15
  • Patch
  • replace
  • apply
  • edit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

[python] 프로그래머스 > 완전탐색 > 카펫
알고리즘/알고리즘 문제

[python] 프로그래머스 > 완전탐색 > 카펫

2020. 9. 8. 23:04

<문제>

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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 ��

programmers.co.kr

1. 문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

2. 제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

3. 입출력 예

brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

 

 

<내가 푼 방법>

from numpy import median

def solution(brown, yellow):
    answer = []
    # yellow의 약수 구하기
    yak_list = [int(i) for i in range(1, yellow+1) if yellow % i == 0]
    
    # 약수의 갯수가 짝수 일 경우
    if len(yak_list) % 2 == 0:
        while len(yak_list):
            x = yak_list.pop()
            y = yak_list.pop(0)
            if (x+2)*(y+2)-(x*y) == brown:
                answer.append(int(x+2))
                answer.append(int(y+2))
                return answer
    # 약수의 갯수가 홀수 일 경우
    else:
        while len(yak_list):
            if len(yak_list) == 1:
                x = median(yak_list)
                y = x
            else:
                x = yak_list.pop()
                y = yak_list.pop(0)
            if (x+2)*(y+2)-(x*y) == brown:
                answer.append(int(x+2))
                answer.append(int(y+2))
                return answer

 

 

<다른사람이 푼 방법들>

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]

 

def solution(brown, red):
    nm = brown + red
    for n in range(1, nm+1):
        if nm%n != 0:
            continue
        m = nm//n
        if (n-2)*(m-2) == red:
            return sorted([n, m], reverse = True)

 

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]

 

def solution(brown, red):
    answer = []
    cand_w = 3
    cand_h = 3
    total_blocks = brown + red
    for w in range(3, total_blocks):
        for h in range(3, total_blocks):
            if w * h < total_blocks:
                continue
            elif w * h > total_blocks:
                break
            elif w < h:
                break
            else:
                if 2*w + 2*h - 4 == brown and w*h - 2*h - 2*w + 4 == red:
                    answer.append(w)
                    answer.append(h)
                    break
        if len(answer) != 0:
            break

    return answer

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 프로그래머스 > 동적계획법(DP) > 정수삼각형  (0) 2020.09.13
[python] 프로그래머스 > 힙(Heap) > 더맵게  (0) 2020.09.09
[python] 프로그래머스 > DFS/BFS > 네트워크  (0) 2020.08.31
[python] 프로그래머스 > DFS/BFS > 단어변환  (1) 2020.08.31
[python] 프로그래머스 > 124 나라의 숫자  (0) 2020.08.27
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 프로그래머스 > 동적계획법(DP) > 정수삼각형
    • [python] 프로그래머스 > 힙(Heap) > 더맵게
    • [python] 프로그래머스 > DFS/BFS > 네트워크
    • [python] 프로그래머스 > DFS/BFS > 단어변환
    happyso
    happyso

    티스토리툴바