[백준] 5212번 지구 온난화 ★

거북이·2023년 3월 25일
0

백준[실버2]

목록 보기
59/81
post-thumbnail

💡문제접근

  • 실버2 문제치고는 조금... 복잡해서 애를 먹었던 문제였다. import copy를 통해서 기존의 2차원 배열을 하나 복사하여 현재 상태의 지도와 50년 후의 지도 두 개를 별개로 만들어 코드를 작성했다.

💡코드(메모리 : 31840KB, 시간 : 64ms)

import copy
import sys
input = sys.stdin.readline

R, C = map(int, input().strip().split())
Map = []
for i in range(R):
    Map.append(list(input().strip()))
new_Map = copy.deepcopy(Map)

dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
for i in range(R):
    for j in range(C):
        sea_count = 0
        if Map[i][j] == ".":
            continue
        else:
            for t in range(4):
                nx = i + dx[t]
                ny = j + dy[t]
                if 0 <= nx < R and 0 <= ny < C:
                    if Map[nx][ny] == ".":
                        sea_count += 1
                else:
                    sea_count += 1
            if sea_count >= 3:
                new_Map[i][j] = "."

start = 0
end = 0
for i in range(R):
    if "X" in new_Map[i]:
        start = i
        break

for i in range(R-1, -1, -1):
    if "X" in new_Map[i]:
        end = i
        break

temp = []
for i in range(C):
    for j in range(start, end+1):
        if new_Map[j][i] == "X":
            temp.append(i)
            break

for i in range(start, end+1):
    print("".join(new_Map[i][temp[0]:temp[-1]+1]))

📌 DFS와 BFS에서 가끔 사용하는 테크닉인 copy 모듈에 대해서 정리

  • 위 그림을 보면 알다시피 배열 a배열 b는 별개의 배열이다. 이 때, 배열 b는 얕은 복사를 통해서 1, 2, 3 객체를 참조하는 새로운 요소를 생성한다.

  • id함수는 객체의 고유값을 리턴해준다. 위 그림을 보면 배열 a배열 b가 참조하는 객체는 동일한데 배열 a배열 b가 참조하는 것은 다르다는 것을 알 수 있다.

  • 위 그림을 보면 배열 a배열 b가 참조하는 객체와 배열 a배열 b가 참조하는 것 둘 다 다르다는 것을 알 수 있다.

💡소요시간 : 37m

0개의 댓글