[PCCE 기출문제] 10번 / 공원
문제 설명
지민이는 다양한 크기의 정사각형 모양 돗자리를 가지고 공원에 소풍을 나왔습니다. 공원에는 이미 돗자리를 깔고 여가를 즐기는 사람들이 많아 지민이가 깔 수 있는 가장 큰 돗자리가 어떤 건지 확인하려 합니다. 예를 들어 지민이가 가지고 있는 돗자리의 한 변 길이가 5, 3, 2 세 종류이고, 사람들이 다음과 같이 앉아 있다면 지민이가 깔 수 있는 가장 큰 돗자리는 3x3 크기입니다.
지민이가 가진 돗자리들의 한 변의 길이들이 담긴 정수 리스트 mats, 현재 공원의 자리 배치도를 의미하는 2차원 문자열 리스트 park가 주어질 때 지민이가 깔 수 있는 가장 큰 돗자리의 한 변 길이를 return 하도록 solution 함수를 완성해 주세요. 아무런 돗자리도 깔 수 없는 경우 -1을 return합니다.
제한사항
- 1 ≤ mats의 길이 ≤ 10
- 1 ≤ mats의 원소 ≤ 20
- mats는 중복된 원소를 가지지 않습니다.
- 1 ≤ park의 길이 ≤ 50
- 1 ≤ park[i]의 길이 ≤ 50
- park[i][j]의 원소는 문자열입니다.
- park[i][j]에 돗자리를 깐 사람이 없다면 "-1", 사람이 있다면 알파벳 한 글자로 된 값을 갖습니다.
입출력 예
matsparkresult[5,3,2] | [["A", "A", "-1", "B", "B", "B", "B", "-1"], ["A", "A", "-1", "B", "B", "B", "B", "-1"], ["-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1"], ["D", "D", "-1", "-1", "-1", "-1", "E", "-1"], ["D", "D", "-1", "-1", "-1", "-1", "-1", "F"], ["D", "D", "-1", "-1", "-1", "-1", "E", "-1"]] | 3 |
내 풀이
def solution(mats, park):
N = len(park)
M = len(park[0])
dp = [[0] * M for i in range(N)]
max_size = 0
for i in range(N):
for j in range(M):
if park[i][j] == '-1':
if i == 0 or j == 0:
dp[i][j] = 1
else:
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
max_size = max(max_size, dp[i][j])
mats.sort(reverse = True)
for mat in mats:
if mat <= max_size:
return mat
return -1
DP를 이용해서 점점 오른쪽 아래로 펼쳐나갔다.
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] Lv2. 퍼즐 게임 챌린지 / 이분 탐색 (1) | 2024.10.04 |
---|---|
[프로그래머스] Lv2. 도넛과 막대 그래프 🙁 / 2024 KAKAO WINTER INTERNSHIP (1) | 2024.10.01 |
[프로그래머스] Lv2. 전력망을 둘로 나누기 (1) | 2024.09.30 |
[프로그래머스] Lv2. 최솟값 만들기 (0) | 2024.09.28 |
[프로그래머스] Lv2. 숫자의 표현 (0) | 2024.09.28 |