카테고리 없음

99클럽 코테 스터디 21일차 TIL - 프로그래머스 카펫 (파이썬)

레야_Reya 2024. 11. 18. 10:19
오늘의 문제

 

프로그래머스 카펫 - 레벨 2

(https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=python3)

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

제한사항

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

입출력 예

코드
def solution(brown, yellow):
    answer = []
    yellow_x = 0
    yellow_y = 0
    for i in range(1, yellow+1):
        if yellow % i == 0:
            yellow_x = yellow // i
            yellow_y = i
            if 2*yellow_x + 2*yellow_y + 4 == brown:
                answer.append(yellow_x+2)
                answer.append(yellow_y+2)
                break 
            answer.sort(reverse = True)
    return answer

 

다른 풀이
def solution(brown, yellow):
    # 전체 타일의 개수
    total = brown + yellow
    
    # 가능한 세로 길이를 순회하며 조건을 만족하는 가로, 세로 찾기
    for height in range(3, int(total ** 0.5) + 1):
        if total % height != 0:
            continue
            
        width = total // height
        
        # 가로 길이가 세로 길이보다 같거나 커야 함
        if width < height:
            continue
            
        # yellow 영역이 맞는지 확인
        # yellow = (width-2) * (height-2)
        if (width-2) * (height-2) == yellow:
            return [width, height]
            
    return None  # 해를 찾지 못한 경우

 


문제 풀이
  1. 카펫의 구조 파악
    • 테두리 1줄은 brown
    • 내부는 모두 yellow로 채워짐
  2. 카펫의 세로 길이를 h, 가로 길이를 w로 두고 계산
    • 전체 타일의 개수
      = w × h
      = brown + yellow
    • yellow area = (w-2) × (h-2)
      테두리 한 줄은 brown 이므로 양옆에서 1씩 뺀 것.
    • w ≥ h
  3. 계산 순서
    • 세로 길이는 최소 3부터 시작함 (테두리 brown 2줄 + yellow 최소 1줄)
    • 전체 타일 개수(brown + yellow)를 세로 길이(h)로 나누어 가로 길이(w) 구하기
    • 구한 w, h 길이로 yellow area 계산 -> 주어진 yellow 값과 일치하는가?
    • w < h 인 경우는 건너뛰기 (무조건 가로세로 길이 같거나 가로가 길어야 함)
    • 모든 조건이 맞으면 그 w, h 길이를 정답으로 return
  4. 예시 테스트
    • 주어진 brown=10, yellow=2
    • 전체 타일 = 12개
    • if h=3 :
      w=4 이고,
      내부의 yellow area: (4-2)*(3-2)=2 여서 주어진 yellow=2 값과 일치함
    • 정답은 [4,3]

이런 방식으로 모든 경우의 수를 완전탐색하면서 모든 조건을 만족하는 해답을 출력하면 solve!