[백준/파이썬] 5212번 지구 온난화 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 5212번 지구 온난화
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
섬 지도에서 바다에 둘러싸인 땅을 잠기게 한 뒤, 남은 땅을 포함하는 최소 직사각형만 출력하는 문제입니다.
코드
r, c = map(int, input().split())
maps = [list(input()) for _ in range(r)]
new_maps = []
for row in maps: new_maps.append(row.copy())
ds = [(-1, 0), (0, 1), (1, 0), (0, -1)]
for i in range(r):
for j in range(c):
if new_maps[i][j] == '.': continue
cnt = 0
for d in ds:
ni, nj = i + d[0], j + d[1]
if not(0 <= ni < r) or\
not(0 <= nj < c) or\
maps[ni][nj] == '.':
cnt += 1
if cnt >= 3: new_maps[i][j] = '.'
sr = sc = 0
er, ec = r, c
for _ in range(10):
if new_maps[sr][sc:ec].count('X') < 1: sr += 1
if list(map(lambda row: row[sc], new_maps[sr:er])).count('X') < 1: sc += 1
if new_maps[er - 1][sc:ec].count('X') < 1: er -= 1
if list(map(lambda row: row[ec - 1], new_maps[sr:er])).count('X') < 1: ec -= 1
for i in range(sr, er):
print(''.join(new_maps[i][sc:ec]))
설명
각 땅 칸의 4방향 바다 개수를 세어 3개 이상이면 침수 처리하고, 결과 지도에서 가장자리를 잘라 최소 범위만 출력합니다.
댓글남기기