새소식

Algorithm/코딩테스트

[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

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

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