문제 : https://school.programmers.co.kr/learn/courses/30/lessons/250136
나의 풀이
from collections import deque
def solution(land):
n, m = len(land), len(land[0])
visited = [[False] * m for _ in range(n)]
col_oil = [0] * m
def bfs(a, b):
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
queue = deque([(a, b)])
visited[a][b] = True
size = 0
columns = set()
while queue:
x, y = queue.popleft()
size += 1
columns.add(y)
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and land[nx][ny] == 1:
visited[nx][ny] = True
queue.append((nx, ny))
for col in columns:
col_oil[col] += size
for i in range(n):
for j in range(m):
if land[i][j] == 1 and not visited[i][j]:
bfs(i, j)
return max(col_oil)
석유 덩어리의 크기를 계산하기 위해 BFS로 조건 검사하며 돌고, 땅의 열 col_oil에 크기를 누적시키며 더하여 저장한다. 이를 통해 최댓값을 찾아 최적의 시추관 위치를 도출할 수 있다.
처음에 문제를 보고 열에 석유 덩어리의 크기를 누적시켜 계산하면 되겠다고 생각하였는데 구현을 어떻게 해야할지 고민이 되었다. queue에서 popleft() 된 y 값을 집합 set()에 넣음으로써 한 열에서 한 덩어리가 중복 저장되지 않게 구현할 수 있다 !
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / [PCCP 모의고사 1회] 3번 / 붕대 감기 / python (0) | 2025.02.14 |
---|---|
Programmers / [PCCP 모의고사 1회] 3번 / 유전법칙 / python (0) | 2025.02.14 |
Programmers / 2단계 / 행렬 테두리 회전하기 / python (0) | 2024.09.02 |
Programmers / 2단계 / 수식 최대 / python / 2020 카카오 인턴십 (0) | 2024.07.29 |
Programmers / 3단계 / 가장 먼 노드 / python (0) | 2024.07.26 |