[ BOJ / Python ] 5212번 지구 온난화

황승환·2022년 6월 17일
0

Python

목록 보기
331/498


이번 문제는 처음에 육지에 해당하는 좌표를 모두 리스트로 저장하고, 육지 좌표 리스트를 순회하며 주변 좌표에 육지가 1개 이하일 경우에 해당 육지를 지우도록 하였다. 이때 한번에 지워지는 것이기 때문에 임시 리스트를 선언하여 변경 사항을 임시 리스트에 적용하였다. 출력 범위의 경우에는 지도 리스트를 순회하며 X가 있는 y좌표를 모두 리스트에 담고, X가 있는 x좌표를 모두 담아 이 두 리스트에서 가장 작은 값과 큰 값을 꺼내 범위로 삼아 출력하도록 하였다.

Code

import copy
r, c=map(int, input().split())
grid=[list(map(str, input())) for _ in range(r)]
tmp=copy.deepcopy(grid)
land=[]
for i in range(r):
    for j in range(c):
        if grid[i][j]=='X':
            land.append((i, j))
dy, dx=[0, 1, 0, -1], [1, 0, -1, 0]
for y, x in land:
    cnt=0
    for i in range(4):
        ny, nx=y+dy[i], x+dx[i]
        if 0<=ny<r and 0<=nx<c and grid[ny][nx]=='X':
            continue
        else:
            cnt+=1
    if cnt>=3:
        tmp[y][x]='.'
land=copy.deepcopy(tmp)
idx=[]
lr=[]
for i in range(r):
    if 'X' not in set(land[i]):
        continue
    else:
        idx.append(i)
        for j in range(c):
            if land[i][j]=='X':
                lr.append(j)
lr.sort()
for i in range(idx[0], idx[-1]+1):
    print(''.join(land[i][lr[0]:lr[-1]+1]))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글