문제리뷰
- 한번만 상하좌우를 계산하여 지우면 되는 간단한 문제이다. 주의해야할 점으로는 입력값을 matrix로 구현한 다음 deepcopy를 써야하는 것인데 2차원배열부터는 copy나 [:]로 복사가 안되기 때문이다.
- dy와 dx를 통해 상하좌우를 검색하고 범위를 넘어가는 경우도 바다로 처리하기 때문에 이것도 처리해야한다.
- 이후 바다만 있는 row와 column을 빼고 print하면 끝이 난다.
문제링크
5212번: 지구 온난화
첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.
www.acmicpc.net
from sys import stdin
import copy
R, C = map(int, stdin.readline().split())
matrix = [list(input()) for _ in range(R)]
result = copy.deepcopy(matrix)
dy = [-1,0,1,0]
dx = [0,-1,0,1]
for y in range(R):
for x in range(C):
count = 0
if matrix[y][x] == '.':
continue
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0 <= ny < R and 0 <= nx < C:
if matrix[ny][nx] == '.':
count += 1
else:
count += 1
if count >= 3:
result[y][x] = '.'
start_y, end_y = 0, 0
for i in range(R):
if 'X' in result[i]:
start_y = i
break
for i in range(R-1, -1,-1):
if 'X' in result[i]:
end_y = i
break
tmp = []
for j in range(C):
for i in range(start_y, end_y + 1):
if 'X' == result[i][j]:
tmp.append(j)
break
for y in range(start_y, end_y+1):
print("".join(result[y][tmp[0]:tmp[-1]+1]))
'백준' 카테고리의 다른 글
[백준] 알파벳 -Python (0) | 2021.03.01 |
---|---|
[백준] N-Queen -Python (0) | 2021.01.24 |
[백준] DFS와 BFS -Python (0) | 2021.01.20 |
[백준] 줄 세우기 -Python (0) | 2021.01.18 |
[백준] 가장 긴 바이토닉 부분 수열 -Python (0) | 2021.01.18 |