[BOJ][⚪2][백준#05212] 지구 온난화

작성:    

업데이트:

카테고리:

태그: , , ,

문제 출처

BAEKJOON Online Judge #5212


문제

푸르고 아름다운 남해에는 많은 섬이 장관을 이루고 있다. 그림이 아니면 볼 수 없을 것 같은 아름다운 장관을 실제로 볼 수 있는 다도해로 상근이는 여행을 떠났다. 다도해에 도착한 상근이는 서울에서 보던 것과는 다른 풍경에 큰 충격을 받았다. 지구 온난화로 인해 해수면이 상승해 섬의 일부가 바다에 잠겨버렸다. 서울로 다시 돌아온 상근이는 이렇게 지구 온난화가 계속 될 경우 남해의 지도는 어떻게 바뀔지 궁금해졌다. 다도해의 지도는 R*C 크기의 그리드로 나타낼 수 있다. ‘X’는 땅을 나타내고, ‘.’는 바다를 나타낸다. 50년이 지나면, 인접한 세 칸 또는 네 칸에 바다가 있는 땅은 모두 잠겨버린다는 사실을 알았다. 상근이는 50년 후 지도를 그려보기로 했다. 섬의 개수가 오늘날보다 적어질 것이기 때문에, 지도의 크기도 작아져야 한다. 지도의 크기는 모든 섬을 포함하는 가장 작은 직사각형이다. 50년이 지난 후에도 섬은 적어도 한 개 있다. 또, 지도에 없는 곳, 지도의 범위를 벗어나는 칸은 모두 바다이다.


입력

첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.


출력

50년 후의 지도를 출력한다.


예제

예제 1

입력

5 3
...
.X.
.X.
.X.
...


출력

X


예제 2

입력

3 10
..........
..XXX.XXX.
XXX.......


출력

.XX...X
XX.....


My Sol

def check(i, j):
    global mat, remove_lst, I, J
    cnt = 0
    for di, dj in ((-1,0),(1,0),(0,1),(0,-1)):
        si, sj = i+di, j+dj
        if not (0<=si<I and 0<=sj<J): continue
        if mat[si][sj] == 'X': cnt += 1

    if cnt < 2:
        remove_lst.append((i, j))


I, J = map(int, input().split())
mat = [list(input()) for _ in range(I)]
remove_lst = []
for i in range(I):
    for j in range(J):
        if not mat[i][j]=='X': continue
        check(i, j)

for i, j in remove_lst:
    mat[i][j] = '.'


for i in range(I):
    for j in range(J):
        if mat[i][j]=='X':
            mxi = i
            break


for i in range(I-1, -1, -1):
    for j in range(J):
        if mat[i][j]=='X':
            mni = i
            break

for j in range(J):
    for i in range(I):
        if mat[i][j] == 'X':
            mxj = j
            break

for j in range(J-1, -1, -1):
    for i in range(I):
        if mat[i][j] == 'X':
            mnj = j
            break

for i in range(mni, mxi+1):
    for j in range(mnj, mxj+1):
        print(mat[i][j], end='')
    print()
  1. X들의 좌표를 따로 모은다.
  2. 각 X들의 좌표의 사방을 확인해, 50년 뒤에 제거될 X를 선별한다.
  3. 제거되는 X들을 .으로 변경한다.
  4. X가 등장하는 최소최대행, 최소최대열을 구해 범위에 맞게 출력한다.


결과

맞았습니다!!

댓글남기기