개요
문제 해결을 위한 알고리즘을 작성합니다
다른 고수들의 알고리즘을 보고 내 코드를 디스 합니다.
문제
영우는 n개의 돌이 일렬로 놓여있는 돌다리에 있다. 왼쪽, 오른쪽으로 이동 가능하며 자기가 방문 가능한 돌들의 개수를 알고 싶어 한다. 현재 위치가 주어졌을 때, 영우가 방문 가능한 돌들의 개수를 출력하시오
입력
첫째 줄 : 돌다리의 돌 개수 n이 주어진다.(1<=n<=100,1000), 왼쪽에서 1번부터 n번까지
둘째 줄 : 그 위치에서 점프할수이는 거리 Ai가 주어진다(1 <=Ai <=100,1000)
출력
영우가 방문 가능한 돌들의 개수
입력 예시
작성 코드
from collections import deque
# 돌 개수 n
n = int(input())
# 돌다리
bridge = list(map(int, input().split()))
start = int(input())
visited = [0] * n
result = 0
def bfs(start):
start = start-1
q =deque()
q.append(start)
visited[start] = 1
result =1
while q:
m = q.popleft()
for k in [-bridge[m], bridge[m]]:
nx = m + k
if 0<= nx < n and visited[nx] == 0:
q.append(nx)
result +=1
visited[nx] = 1
print(result)
bfs(start)
재작성한 코드 근데 이제 고수들의 생각을 곁들인
from collections import deque
n = int(input())
Ai = list(map(int, input().split()))
s = int(input())
visited = [0] * n
def bfs(s):
visited[s] = 1
q = deque()
q.append(s)
while q:
x = q.popleft()
nx = [x - Ai[x], x + Ai[x]]
for i in nx:
if 0<= i < n and visited[i] == 0:
q.append(i)
visited[i] = 1
# 방문했던 곳(1의 개수) 리턴
return visited.count(1)
print(bfs(s-1))
느낀 점
나는 방문한 곳을 카운팅 하는 result변수를 왜 따로 썼을까..