땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • I
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • D
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 1326 폴짝폴짝(BFS)

2022. 6. 26. 21:10

https://www.acmicpc.net/problem/1326

 

1326번: 폴짝폴짝

첫째 줄에 징검다리의 개수 N(1≤N≤10,000)이 주어지고, 이어서 각 징검다리에 쓰여 있는 N개의 정수가 주어진다. 그 다음 줄에는 N보다 작거나 같은 자연수 a, b가 주어지는 데, 이는 개구리가 a번

www.acmicpc.net

DP문제라고 생각했지만 bfs적으로 바로 생각이 나서 그래프로 풀었다.

 

● 지금 서있는 발판 숫자의 배수만큼 뛰어야하니까 for에서 간격을 data값으로 해준 것

● a to b로 이동해야하는데 a와 b의 크기비교가 문제에 제시하지 않았기 때문에 반대 상황도 고려해야함

 

방문하지 않았던 곳은 큐에 넣어주고 그 곳으로 가기위한 점프수는 popleft한 값에 1번 점프된 곳이니까 +1을 해줘서 저장

 

n = int(input())
data = list(map(int,input().split()))
a,b = list(map(int,input().split()))

from collections import deque

def bfs():
    queue = deque()
    queue.append(a-1)
    dp = [-1] * n
    dp[a-1] = 0

    while queue:
        temp = queue.popleft()
        for k in range(temp,n,data[temp]):
            if dp[k] == -1:
                queue.append(k)
                dp[k] = dp[temp] + 1
                #print(dp)
                if k == b-1:
                    return dp[k]
        for k in range(temp,-1,-data[temp]):
            if dp[k] == -1:
                queue.append(k)
                dp[k] = dp[temp] + 1
                if k == b-1:
                    return dp[k]
    return -1
print(bfs())

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 6236 용돈 관리(이분 탐색)  (0) 2022.07.03
백준 10451 순열 사이클(DFS, Union-Find)  (2) 2022.06.27
백준 16112 5차 전직(그리디)  (0) 2022.06.26
백준 9421 소수상근수(소수)  (0) 2022.06.26
백준 2872 우리집엔 도서관이 있어(그리디)  (0) 2022.06.08
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 6236 용돈 관리(이분 탐색)
    • 백준 10451 순열 사이클(DFS, Union-Find)
    • 백준 16112 5차 전직(그리디)
    • 백준 9421 소수상근수(소수)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바