오늘은 여기까지
[백준] 지구 온난화 - Python 파이썬 본문
https://www.acmicpc.net/problem/5212
- 원 지도는 탐색용으로 그대로 두고, 50년 후 지도를 그리기 위해 new_map을 deepcopy한다.
- 지도 전체를 돌면서 땅이 나오면 상,하,좌,우를 확인한다.
- 주변이 `"."` 이거나, 지도 범위를 벗어난 경우 모두 바다로 취급하여 cnt를 증가 시킨다.
- 주변의 세 칸 이상이 바다라면 땅이 잠긴다.
- 지도 크기를 최소화한다.
- 육지('X')를 포함하는 가장 작은 직사각형 영역만을 남기기 위해, 남아있는 땅의 가장 왼쪽, 오른쪽, 위, 아래 좌표를 찾는다.
- 해당 범위 내의 지도만을 결과로 출력한다.
전체 코드
import copy
def find_map(R, C, map):
new_map = copy.deepcopy(map)
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
for i in range(R):
for j in range(C):
if map[i][j] == "X":
cnt = 0
for dir in range(4):
nx = i + dx[dir]
ny = j + dy[dir]
if nx<0 or nx>=R or ny<0 or ny>=C or map[nx][ny] == ".":
cnt += 1
if cnt >= 3:
new_map[i][j] = "."
# 지도 크기 최소화
min_x, max_x = C, -1
min_y, max_y = R, -1
for i in range(R):
for j in range(C):
if new_map[i][j] == "X":
min_x = min(min_x, j)
max_x = max(max_x, j)
min_y = min(min_y, i)
max_y = max(max_y, i)
# 결과 출력
result = []
for i in range(min_y, max_y + 1):
result.append(''.join(new_map[i][min_x:max_x + 1]))
return result
R, C = map(int, input().split())
map = [list(input()) for _ in range(R)]
result = find_map(R, C, map)
for row in result:
print(row)'Problem Solving' 카테고리의 다른 글
| [백준] 최소비용 구하기 - Python 파이썬 (0) | 2024.10.21 |
|---|---|
| [프로그래머스] 표 편집 - Python 파이썬 (1) | 2024.10.17 |
| [백준] 자리배정 - Python 파이썬 (0) | 2024.10.15 |
| [백준/19941] 햄버거 분배 - Python 파이썬 (1) | 2024.10.15 |
| [백준] 부등호 - Python 파이썬 (0) | 2024.10.14 |