Algorithm/구름
[구름][알고리즘 먼데이][2주차] 폭탄구현하기 : 파이썬(python)
sdoaolo
2022. 11. 6. 22:21
728x90
알고리즘 먼데이 챌린지 2주차 폭탄구현하기 (⭐⭐)
구름LEVEL
코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이
level.goorm.io
폭탄이 떨어진위치들이 주어졌을 때 전체 폭탄값들의 합을 출력하는 간단한 문제이다.
✅ 풀이 과정
1. 복잡도 고려
정사각형의 한변의 길이 n : 1<=n <=20
떨어트릴 폭탄의 개수 k : 1<=k<=500000
이므로
최악의 케이스는 : n =20 , k = 500000
폭탄값 증가 = 500000(폭탄) * 4(상하좌우) = 2000000
전체 폭탄값 합하기 = 20(정사각형 row반복 ) * 20(각 row의 sum구해주기) = 400
2000400는 그렇게까지 시간복잡도가 크지 않아서 생각나는대로 구현해줘도 될 것 같다.
2. 수도코드
1) for문으로 폭탄의 위치(row, column)을 입력받는다. 배열은 0부터 시작하므로 입력받은 값들을 1 감소시킨다.
2) 입력받은 위치(row,column)의 폭탄값을 1 증가시킨다.
3) for 문으로 4번 반복, pos로 상 하 좌 우 의 새로운 row column값을 만든다. 해당위치가 유효한 범위이면 폭탄값을 1 증가시킨다.
4) 전체 폭탄값의 합을 구해야하므로 더해주고, 출력한다.
✅ 정답코드
import sys
input = sys.stdin.readline
n, k = map(int,input().split())
arr = [[0]*n for _ in range(n)]
pos = [[0,1],[0,-1],[1,0],[-1,0]]
for _ in range(k):
a, b = map(int, input().split())
a, b = a-1, b-1
arr[a][b] +=1
for i in range(4):
da = a + pos[i][0]
db = b + pos[i][1]
if (0<=da<n) and (0<=db<n):
arr[da][db] += 1
result = 0
for li in arr:
result += sum(li)
print(result)