- 코딩테스트 스터디를 시작하고 백준 문제를 풀어보고 있는 중
- 다른 건 어찌어찌 해결했는데, 마지막에 출력할 때 y축이 너~무 어려웠다.
- 방향벡터도 손에 좀 익긴 해야 할 듯...
row, col = map(int, input().split())
arr = [list(input()) for _ in range(row)] # input
new = [] # new array
# 방항 벡터
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(row):
for j in range(col):
if arr[i][j] == 'X': # 땅이면 인접한 세 칸이상이 바다인지 확인
count = 0 # 카운트는 X를 만날 때마다 초기화 되어야 함
for k in range(4): # 4개 다 확인하기
nx = i + dx[k]
ny = j + dy[k]
if 0 <= nx < row and 0 <= ny < col:
if arr[nx][ny] == '.':
count += 1
else:
count += 1 # 범위를 벗어날 때
continue
if count >= 3:
new.append((i, j))
# . 으로 바꾸기
if len(new) > 0:
for x, y in new:
arr[x][y] = '.'
x1 = 0
y1 = col - 1
x2 = 0
y2 = 0
# 지도 범위 구하기
# x의 시작값
for i in range(row):
if 'X' in arr[i]:
x1 = i
break
# x의 마지막 값
for i in range(row-1, -1, -1):
if 'X' in arr[i]:
x2 = i
break
# y값 ----> ***이게 너무 어려움
for i in range(x1, x2 + 1): # 1 -> .X.
for j in range(col): # 3
if arr[i][j] == 'X': # arr[2][1]
y1 = min(y1, j) # min(2, 1) = 1
y2 = max(y2, j) # max(0, 1) = 1
# 정답 출력하기
for i in range(x1, x2+1):
for j in range(y1, y2+1):
print(arr[i][j], end='')
print()
'Programming > 1 Day 1 Commit' 카테고리의 다른 글
[BaekJoon] 치킨치킨치킨 - 실버4 (Python3) (0) | 2024.02.16 |
---|---|
[BaekJoon] 주유소 - 실버3 (Python3) (0) | 2024.02.15 |
[HackerRank] Find the Runner-Up Score! (Python3) (0) | 2023.09.05 |
[BaekJoon] 2798번: 블랙잭 (Python3) (0) | 2023.04.14 |
[Programmers] 자연수 뒤집어 배열로 만들기 (0) | 2023.02.10 |