단의 개발 블로그

카펫 본문

Algorithm/PYTHON

카펫

danso 2024. 8. 29. 18:10

💡 문제

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

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

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

💡 제한사항

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

입출력

입출력 예 #1
위의 예시와 같습니다.
입출력 예 #2
문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.

 

 풀이

def solution(brown, yellow):
    answer = []
    carpet = brown + yellow
    
    for i in range(3, carpet):
        y = i
        x = carpet / y
        
        if(x >= y):
            if ((x - 2) * (y - 2)) == yellow:
                answer.append(x)
                answer.append(y)
                break
        
    return answer
 

공식을 찾지 못해서 조금 헤맸다. 먼저 노란색 격자 양옆으로 갈색 격자가 존재한다. 따라서 노란색 격자 크기는 위아래 해서 -2, 양옆 해서 -2를 해줘야 한다. 전체적인 풀이 과정은 다음과 같다.

  1. 갈색과 노란색 크기를 더해서 카펫의 총 크기를 먼저 구해준다.
  2. 해당 카펫은 노란색 격자를 감싸야 하기 때문에 최소 3칸 부터 시작해야 한다. 따라서 반복문은 3부터 시작한다.
  3. 세로 크기도 최소 3부터 시작해야 하기 때문에 3으로 저장해주고, 가로 크기는 카펫 총 크기에서 세로 크기로 나눠준다.
  4. 구한 가로가 세로보다 클 경우 앞 서 구한 노란색 격자 공식과 같은지 비교하고, 해당 값과 일치하면 반복문을 종료한다.

 

'Algorithm > PYTHON' 카테고리의 다른 글

점프와 순간 이동  (0) 2024.08.30
구명보트  (0) 2024.08.30
짝지어 제거하기  (0) 2024.08.29
피보나치 수  (2) 2024.08.28
다음 큰 숫자  (0) 2024.08.28