[구름 LEVEL] 폭탄 구현하기 2 (Python)

이솔·2024년 7월 2일

[구름 LEVEL] 폭탄 구현하기 2

https://level.goorm.io/exam/195691/%ED%8F%AD%ED%83%84-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-2/quiz/1


문제 설명

· N * N 크기의 땅이 있을 때, 땅에 폭탄이 떨어질 경우 중심과 상하좌우 값이 1 증가한다. 단, 땅의 상태가 #이라면 변하지 않고, @라면 2씩 증가한다.

· 폭탄이 모두 떨어지고 난 후의 땅의 최댓값을 출력


접근 방법

· boom의 범위 좌표를 리스트화해서 저장해놓고, 폭탄이 들어올 때마다 불러와 더하기

· 땅 밖으로 나가지 않는 경우에만 게산하도록 처리

· @와 #의 경우에는 특수한 경우이므로 dict에 저장해 놓기

· 최종 땅 상태의 각 행에 대해 max값을 계산하고, 다시 max 연산을 해줌으로써 최댓값 출력


알고리즘 설계 및 구현

N, K = map(int, input().split())

# 필드 초기화
field = [input().split() for _ in range(N)]

# 폭탄 영향 계산
new_field = [[0] * N for _ in range(N)]
boom_range = ((0, 0), (1, 0), (-1, 0), (0, 1), (0, -1))
info_dict = {'@': 2, '#': 0}

for _ in range(K):
    a, b = map(int, input().split())
    for di, dj in boom_range:
        x, y = a + di - 1, b + dj - 1
        if 0 <= x < N and 0 <= y < N:
            if field[x][y] in info_dict:
                new_field[x][y] += info_dict[field[x][y]]
            else:
                new_field[x][y] += 1

# 최대 데미지 출력
max_damage = max(max(row) for row in new_field)
print(max_damage)

결과


0개의 댓글