-
프로그래머스 고득점 kit(유형정리) - 카펫Algorithm/Brute Force 2023. 2. 1. 11:14728x90
코딩테스트 연습 - 카펫 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
10 2 [4, 3] 8 1 [3, 3] 24 24 [8, 6] 문제는 이와 같다.
문제를 잘 살펴보면 한 가지 특징과 문제 풀이법을 떠올릴 수 있었다.
특징 1) brown과 yellow의 총합이 return 된 값의 곱이 된다는 것을 발견할 수 있다.
풀이법) 가로 : a, 세로 : b로 길이를 미지수로 두게 되면 노란색 부분의 넓이는 반드시 (a-2) * (b-2) 가 된다.
사실 위의 특징과 풀이법을 떠올리면 문제가 바로 풀린다.
def solution(brown, yellow): for b in range(1, (brown+yellow) + 1): if((brown+yellow) % b) == 0: a = (brown+yellow) / b # a : 가로 길이, b : 세로 길이 if (a-2)*(b-2) == yellow: return [a,b]
(brown+yellow)의 합을 세로 b로 나누어 떨어질 때 가로 a는 (brown+yellow)의 합의 나눗셈으로 표현이 가능하다. 이 부분은 특징 1을 발견하면 손쉽게 구현이 가능하다. 그리고 아래 if문을 통해 풀이법에 알맞게 수식을 작성해 주고 각각 가로, 세로 길이를 return 해주면 끝!!!
728x90'Algorithm > Brute Force' 카테고리의 다른 글
완전탐색(유형정리) - 백준 1969 (0) 2023.03.11 프로그래머스 고득점 kit(유형정리) - 모음사전 (0) 2023.02.02 프로그래머스 고득점 kit(유형정리) - 피로도 (1) 2023.02.01 프로그래머스 고득점 kit(유형정리) - 소수찾기 (0) 2023.01.31 프로그래머스 고득점 kit(유형정리) - 모의고사 (0) 2023.01.27