Python/프로그래머스

카펫

룰루랄라룰루랄라 2024. 3. 25. 19:25

중앙은 노란색, 테두리 1줄은 갈색은 카펫을 사려고 하는데

각 노란색, 갈색의 격자 개수는 기억하지만 전체 카펫의 크기를 기억 못한다고 한다..

 

노란색, 갈색 격자 개수를 받아서 전체 카펫의 가로 세로 크기를 구해야 하는 문제 이다!

 

 

카펫은 예시는 이렇다! 중간은 노란색, 테두리 한줄은 갈색!

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

입출력 예는 이렇다

 

흠.. 카펫의 특징을 찾아보면...

우선 brown + yellow 가 총 격자의 갯수.. 즉 가로x세로 일것이다

그리고 가로길이는 세로길이보다 같거나 길다고 한다

그리고 갈색은 테두리 "1줄" 만 차지 ( 가로, 세로 위아래 양옆.. 각 2줄 ) 하므로 가로 m, 세로 n 이라고 했을때

카펫이 m*n 이라면...

노란색의 크기는 (m-2)x(n-2) 가 되어야 하겠넹 ~ 

 

따라서, 주어진 격자 갯수로 총 크기를 얻고

가로나 세로 값을 반복해서 살펴보면서,, 거기서 노란색의 크기가 맞는지 체크하면 되겠다!

또한 m*n = total 이므로 나누어 떨어져야하는 것도 체크하면 계산도 덜 하겠다!

 

최종 코드는 이렇다!

def solution(brown, yellow):
    total = brown+yellow
    
    for m in range(3,total):
    
        if not total%m==0: continue
        
        n = total/m
        
        # brown 은 테두리로 가로,세로 각 2씩 차지함
        y = (m-2)*(n-2)
        if y==yellow:
            return [max(m,n),min(m,n)]

 

역시나 생각하는게 더 오래걸린 문제! 하하

 

출처 : https://school.programmers.co.kr/learn/challenges

'Python > 프로그래머스' 카테고리의 다른 글

예상 대진  (1) 2024.03.25
구명보트  (0) 2024.03.25
피보나치 수  (0) 2024.03.25
도넛과 막대 그래프  (0) 2024.03.21
가장 많이 받은 선물  (0) 2024.03.21