[백준/Python] DFS/BFS-1697번. 숨바꼭질

2024. 10. 12. 13:14·코딩테스트/BAEKJOON
728x90
반응형

📌 문제링크:  https://www.acmicpc.net/problem/1697

 

✅ 문제유형: BFS/DFS 

 

✅ 풀이방법 

  • 가장 빠른 시간을 출력해야 하니까 BFS를 선택했다. 
    • DFS/BFS 선택하는 전략: 2024.10.09 - [코딩테스트] - [알고리즘 전략] DFS/ BFS

[알고리즘 전략] DFS/ BFS

DFS가 유리한 경우 재귀적인 특징과 백트래킹을 이용해 모든 경우를 하나씩 전부 탐색하는 경우 그래프의 크기가 클 경우 최적화된 답을 찾는 것이 아닐 경우 경로의 특징을 저장해야 하는 경

programmerhub-heeya16.tistory.com

  • <처음 코드> 시간초과 
    • 이유: time 값을 각 점에 방문 당시의 cnt값으로 queue에 같이 넣고 빼려 했더니, 자료구조 상 시간이 오래 걸리는 것 같다.
    • 📢 해결: 차라리 100,000개 배열인 visited를 선언하는 게 낫고, 여기에 각 점을 방문할 때의 시간을 저장해두는 게 효율적이다. 다른 문제 풀이에서도 graph 자체에 시간이나, 거쳐온 블록 수를 저장하듯이.

📌풀이코드 

N, K = map(int, input().split())

# 가장 빠른 시간을 출력해야 하니 bfs가 맞다
q = [] 
visited = [0 for _ in range(100000+1)]
answer = 0
def bfs(n):
    global answer
    q.append(n)
    while q:
        v = q.pop(0)
        if v == K: 
            answer = visited[v]
            break
            # stop 
        nextpos = [v-1, v+1, 2*v]
        for i in range(3):
            if 0<=nextpos[i]<=100000 and not visited[nextpos[i]]:
                q.append(nextpos[i])
                visited[nextpos[i]] = visited[v] + 1
bfs(N)
print(answer)

###############################################################
# 시간 초과 코드 
# def bfs(n, time):
#     global answer
#     q.append((n, time))
#     while q:
#         v, t = q.pop(0)
#         visited.append(v)
#         #print(f"v={v} t={t}")
#         if v == K: 
#             answer = t
#             break
#             # stop 
#         nextpos = [v-1, v+1, 2*v]
#         for i in range(3):
#             if 0<=nextpos[i]<=100000 and nextpos[i] not in visited:
#                 #print(f"APPEND v={nextpos[i]}, t={t+1}")
#                 q.append((nextpos[i], t+1))
# bfs(N)
# print(answer)
728x90
반응형
저작자표시 비영리 변경금지

'코딩테스트 > BAEKJOON' 카테고리의 다른 글

[백준/Python] 1935. 후위 표기식 2  (1) 2024.10.25
[백준/Python] DFS/BFS-5014번. 스타트링크  (1) 2024.10.12
[백준/Python] DFS/BFS-2644번. 촌수 문제  (1) 2024.10.11
[백준/Python] DFS/BFS-2667번. 단지번호 붙이기  (1) 2024.10.09
[백준/Python] DFS/BFS-2606번. 바이러스  (1) 2024.10.09
'코딩테스트/BAEKJOON' 카테고리의 다른 글
  • [백준/Python] 1935. 후위 표기식 2
  • [백준/Python] DFS/BFS-5014번. 스타트링크
  • [백준/Python] DFS/BFS-2644번. 촌수 문제
  • [백준/Python] DFS/BFS-2667번. 단지번호 붙이기
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (3)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[백준/Python] DFS/BFS-1697번. 숨바꼭질
상단으로

티스토리툴바