새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv2_카펫

2022. 8. 2. 19:50

  • -

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

"""
입출력 예시)

brown = 10, yellow = 2 -> [4, 3]
brown = 8, yellow = 1 -> [3, 3]
brown = 24, yellow = 24 -> [8, 6]
"""

def solution(brown, yellow): 
    answer = []
    size = brown + yellow # 전체 카펫의 크기 (가로 x 세로 = 브라운 + 옐로우)
    
    for x in range(size, 2, -1):  # x: 카펫의 가로, size부터 1까지 역순으로 반복
        if size % x == 0: # size가 x로 나누어 떨어지면
            y = size // x # y: 카펫의 세로 -> size를 x로 나눈 몫
            
            if yellow == (x-2) * (y-2): # yellow가 (x-2)*(y-2)와 같다면
                answer.append(x)
                answer.append(y)
                return sorted(answer, reverse = True) # 가로가 세로보다 같거나 커야하기 때문에 내림차순 정렬

    return answer

 

내가 발견한 규칙은 가로 x 세로 = 브라운 + 옐로우 였는데

이 문제를 풀려면 (가로-2) x (세로-2) = 옐로우 라는 것까지 발견했어야 하는 것 같다..!

 

 

  • 역순으로 for문 돌면서 x와 y가 구해지는 과정
# brown = 24, yellow = 24

"""
x: 48
y: 1

x: 24
y: 2

x: 16
y: 3

x: 12
y: 4

x: 8
y: 6

-> [8, 6]
"""

 

 

 


 

옐로우의 가로와 세로를 구해서 푸는 방법도 있다

  • (옐로우의 가로*2) + (옐로우의 세로*2) + 4 = 브라운
  • 전체 카펫의 가로 = 옐로우의 가로+2, 전체 카펫의 세로 = 옐로우의 세로+2

 

def solution(brown, yellow): 
    answer = []
    
    for i in range(1, yellow+1) : # 1부터 yellow까지 
        if yellow % i == 0 : # yellow가 i로 나누어 떨어지면
            yellow_x = int(yellow/i) # yellow의 가로 = yellow를 i로 나눈 몫
            yellow_y = i # yellow의 세로 = i 
            if yellow_x*2 + yellow_y*2 + 4 == brown : # (yellow의 가로*2) + (yellow의 세로*2) + 4 = brown 이면
                answer.append(yellow_x+2) # yellow의 가로 + 2
                answer.append(yellow_y+2) # yellow의 세로 + 2
                
                return sorted(answer, reverse = True) # 가로가 세로보다 같거나 커야하기 때문에 내림차순 정렬
    
    return answer

 

 

 

  • for문 돌면서 옐로우의 x와 옐로우의 y가 구해지는 과정
# brown = 24, yellow = 24 

"""
yellow_x: 24
yellow_y: 1

yellow_x: 12
yellow_y: 2

yellow_x: 8
yellow_y: 3

yellow_x: 6
yellow_y: 4

-> [8, 6]
"""

 

 

 

 

 

참고)

 

https://it-garden.tistory.com/361

 

[프로그래머스 Level 2] 카펫 - 파이썬(Python)

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

it-garden.tistory.com

 

https://iambeginnerdeveloper.tistory.com/123

 

[프로그래머스] Level2 | 카펫 - 파이썬(Python) | 완전탐색

https://programmers.co.kr/learn/courses/30/lessons/42842?language=python3 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해..

iambeginnerdeveloper.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!