MingyuPark

[프로그래머스] 카펫 본문

Algorithm

[프로그래머스] 카펫

MingyuPark 2022. 9. 18. 13:19

문제

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

 

프로그래머스

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

programmers.co.kr


아이디어

간단한 완전탐색 문제다. 

 

첫 번째로 노란색 격자와 갈색 격자와 개수를 통해 전체 카펫의 격자의 개수를 계산할 수 있다.

카펫은 직사각형이기 때문에 격자의 개수를 구하면 가능한 (가로, 세로) 조합의 크기를 계산할 수 있다. 

 

첫 번째로 전체 격자의 개수에 대해 가능한 (가로, 세로) 조합의 크기를 계산하는 func 함수를 정의했다. 

가로의 길이는 세로의 길이보다 같거나 크기 때문에 가로의 길이를 큰 수부터 작은 수로 순회하는 방식을 사용했다.

 

두 번째로는 (가로, 세로)의 조합에 대해서 해당 조합이 문제에서 제시한 조건에 맞는지를 탐색했다. 

전체 카펫의 크기가 h × v 이라고 한다면 노란색 격자의 개수는 (h - 2) × (v - 2)가 된다. 

따라서 (h - 2) × (v - 2) == yellow이면 answer에 (h, v)를 append하고 반복문을 탈출한다. 


Solution

def func(total) : 
    lst = []
    for i in range(total//2, 1, -1) : 
        if total % i == 0 : 
            lst.append((i, total // i))
    return lst

def solution(brown, yellow):
    total = brown + yellow
    
    answer = []
    for h, v in func(total) : 
        if (h - 2) * (v - 2) == yellow : 
            answer.append(h)
            answer.append(v)
            break
    return answer

'Algorithm' 카테고리의 다른 글

최장 증가 부분 수열 (LIS) 알고리즘 - DP  (1) 2022.09.22
[백준 2108] 통계학  (0) 2022.09.21
[백준 10942] 팰린드롬?  (1) 2022.09.14
[백준 2839] 설탕 배달  (0) 2022.09.13
[백준 9461] 파도반 수열  (0) 2022.09.12