새소식

코딩테스트/문제풀이

[goorm Level 2] 폭탄 구현하기 (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

풀이

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()함수를 적용했다.

 

 

Contents

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

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