[백준/파이썬] 5212번 지구 온난화 풀이

업데이트:



문제 정보


풀이

문제

섬 지도에서 바다에 둘러싸인 땅을 잠기게 한 뒤, 남은 땅을 포함하는 최소 직사각형만 출력하는 문제입니다.

코드

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개 이상이면 침수 처리하고, 결과 지도에서 가장자리를 잘라 최소 범위만 출력합니다.



댓글남기기