백준
BOJ 백준 파이썬 18513 샘터
코테봇
2022. 6. 29. 18:26
일단은 각 샘터의 위치를 큐에 집어 넣는다.
그리고 큐에서 꺼내서 +1,-1로 움직인다.
큐에 집어넣을때마다 갯수는 하나씩 추가하고 결과값도 누적으로 더해간다.
bfs란 말에 맞게 너비우선탐색, 거리가 1,2,3,4 순차적으로 계산해간다.
bfs의 정석 같은 문제라 생각
하지만, 이 문제에서 어려운 점은 메모리 초과
이것은 dict형으로 해결해주면 된다.
dist 배열(내 코드에서는 vist)을 dict로 선언해주고
dist[nx]=dist[x]+1식으로 문제를 해결해가면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import sys
from collections import deque
from itertools import combinations
if __name__=='__main__':
# sys.stdin=open("input.txt", "rt")
n,home=map(int,input().split()) ##n=샘터의 개수, k=집의 개수
start=list(map(int,input().split())) ##샘터 입력 받기
max_x=100000000
##출발점 큐에 집어넣기
res=0
cnt=0
visit=dict()
q=deque()
##샘터 배치
for x in start:
if -max_x<=x<=max_x:
visit[x]=0
q.append(x)
dx=[-1,1]
##집 배치
cnt=0
while q:
x=q.popleft()
#print(x)
for k in range(2):
nx=x+dx[k]
if nx not in visit:
#print(visit)
visit[nx]=visit[x]+1
q.append((nx))
res+=visit[nx]
cnt+=1
##집을 다 채웠으면 출력
if cnt==home:
print(res)
exit()
|
cs |