뭔가 더 잘 풀수 있을 것 같은데,,
확실히 시뮬레이션 단원이 코드가 길게 나오는 것 같다.
# r, c 입력
r, c = map(int, input().split())
# grid
grid = [
[0] * c
for _ in range(r)
]
# grid 채워넣기
for i in range(r):
a = input()
for j in range(len(a)):
# 육지는
if a[j] == 'X':
# 1로 표시
grid[i][j] = 1
# temp
temp = [
[1] * c
for _ in range(r)
]
# in_range(x, y)
def in_range(x, y):
return 0 <= x and x < r and 0 <= y and y < c
# check(x,y)
def check(x, y):
# cnt
cnt = 0
# 동서남북 -> 순서 상관 없음
dxs, dys = [-1, 1, 0, 0], [0, 0, -1, 1]
# 조사 시작
for dx, dy in zip(dxs, dys):
# 조사 위치
nx, ny = x + dx, y + dy
# 격자 밖이면
if not in_range(nx, ny):
# 바다임
cnt += 1
# 격자 안에 있고, 조사 위치가 0이면
elif grid[nx][ny] == 0:
# 바다임
cnt += 1
# 조사 후 바다가 3면 이상이면
if cnt >= 3:
# 침수
return True
# 이하면 살아남음
return False
# find_min_x()
def find_min_x():
# 탐색 시작
for i in range(r):
for j in range(c):
# 육지 발견하면
if grid[i][j] == 1:
# 그 가로줄 반환
return i
# find_max_x()
def find_max_x():
# 최댓값 설정
M = -1
# 탐색 시작
for i in range(r):
for j in range(c):
# 육지를 발견할 때마다
if grid[i][j] == 1:
# 최댓값 갱신
M = i
# 최댓값 반환
return M
# find_min_y()
def find_min_y():
# 최솟값 설정
m = 11
# 탐색 시작
for i in range(r):
for j in range(c):
# 육지 발견하고, 최솟값보다 열값이 작으면
if grid[i][j] == 1 and j < m:
# 최솟값 업데이트
m = j
# 최솟값 반환
return m
# find_max_y()
def find_max_y():
# 최댓값 설정
M = -1
# 탐색 시작
for i in range(r):
for j in range(c):
# 육지를 발견하고, 최댓값보다 열값이 크다면
if grid[i][j] == 1 and j > M:
# 최댓값 갱신
M = j
# 최댓값 반환
return M
# 설계
# 1. 바꿀 위치 찾아 temp에 기록
for i in range(r):
for j in range(c):
# grid의 삼면이나 사면이 바다이면
if check(i, j):
# temp[i][j]가 0으로 바뀜
temp[i][j] = 0
# 2. grid 바꿔주기
for i in range(r):
for j in range(c):
# temp 에서 바다가 된 곳이면
if temp[i][j] == 0:
# 바다로 바꿔 줌
grid[i][j] = 0
# 3. x 최솟 값, y 최솟 값, x 최댓값, y 최댓값 찾기
min_x = find_min_x()
max_x = find_max_x()
min_y = find_min_y()
max_y = find_max_y()
# 4. 출력
for i in range(min_x, max_x + 1):
for j in range(min_y, max_y + 1):
# 육지라면
if grid[i][j] == 1:
print('X', end='')
# 바다라면
else:
print('.', end='')
print()'Algorithm(BOJ, Python) > Simulation' 카테고리의 다른 글
| [백준_2174] 로봇 시뮬레이션 python (2) | 2022.09.16 |
|---|---|
| [백준_14499] 주사위굴리기 python (0) | 2022.09.04 |
| [백준_14503] 로봇청소기 python (0) | 2022.08.28 |
| [백준_1063] 킹 python (0) | 2022.08.04 |
| [백준_8911] 거북이 python (0) | 2022.08.03 |