문제
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
풀이
1. 2차원 리스트 ground로 땅을 표현했다. 땅에 폭탄 값을 지정할 때 이 ground를 바꿀 것이다
2. value는 좌표 (y,x) tuple을 키값으로 초기에 표시되어 있던 값을 저장한다.(ground는 변경용, value는 초기 기록용)
3. nx,ny를 통해 현위치,상,하,좌,우 를 모두 돌도록 처리했다. 지금 좌표 nx,ny에 따라 그 지점의 초기 지정값(value에 저장해놨다)인 state값에 따라, 적절한 값을 더해줬다
코드
n,k = map(int,input().split())
ground = []
bomb = []
value = {}
for i in range(n):
row = list(input().split())
ground.append(row)
for y in range(len(ground)):
for x in range(len(ground[y])):
value[(y,x)] = ground[y][x]
def bomb(tup,ground):
y,x = tup[0]-1 , tup[1]-1
#현위치,상,우,하,좌
dx = [0,0,1,0,-1]
dy = [0,-1,0,1,0]
for i in range(5): #0,1,2,3
nx = dx[i] + x
ny = dy[i] + y
if 0<=nx<=len(ground)-1 and 0<=ny <=len(ground)-1:
state = value[(ny,nx)]
if state == "#":
continue
elif state == "0":
if ground[ny][nx]== "0":
ground[ny][nx] = 1
else:
ground[ny][nx] +=1
elif state == "@":
if ground[ny][nx]== "@":
ground[ny][nx] = 2
else:
ground[ny][nx] +=2
for i in range(k):
y,x = map(int,input().split())
bomb((y,x),ground)
max_val = 0
for y in range(len(ground)):
for x in range(len(ground[y])):
if str(ground[y][x]).isdigit():
if int(ground[y][x]) > max_val:
max_val = int(ground[y][x])
print(max_val)
첨언
- 좌표 접근은 이전보다 수월하게 한 듯 하다
- 다른 사람들 풀이 보면 더 간략하던데,, 충분히 더 간략하게 풀 수 있던 것 같다. 그러나 구현을 연습하기엔 좋았다
- 2차원 배열에 보통 int가 저장되는 것과 달리, #와 @때문에 일단 str으로 처리했다. 마지막 이중for문에서 형변환을 처리할 때 조금 버벅였다
- isdigit()은 str을 기준으로 작동하는 함수이기에, ground[y][x]를 str로 형변환 한 후, isdigit()함수를 적용했다.