새소식

Programming/1 Day 1 Commit

[BaekJoon] 지구온난화 - 실버2 (Python3)

  • -

  • 코딩테스트 스터디를 시작하고 백준 문제를 풀어보고 있는 중
  • 다른 건 어찌어찌 해결했는데, 마지막에 출력할 때 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()
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.