김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • local저장소
  • 로컬저장소
  • ㄱ
  • 깃허브데스크탑
  • Remote저장소
  • GitHubDesktop
  • 원격저장소
  • KMU_WINK

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

•알고리즘(Algorithm )/문제풀이

[백준16953&파이썬] BFS를 이용해 1차원 탐색하기

2023. 5. 5. 23:15

# 문제

백준166953 A->B 파이썬 풀이

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

# 코드

'''
  - BFS를 이용한 전형적인 풀이 같다.
'''
import sys
from collections import deque
from collections import defaultdict

A, B = map(int, sys.stdin.readline().split())
dq = deque()
visit = defaultdict(bool)
dq.append((A, 1))
visit[A] = True  # 초기 방문

while len(dq) != 0:
  cur = dq.popleft()  # ( node, cnt )

  next1 = (cur[0] * 2, cur[1] + 1)
  next2 = ((cur[0] * 10) + 1, cur[1] + 1)

  if next1[0] == B or next2[0] == B:
    print(next1[1])
    exit()

  if visit[next1[0]] == False and next1[0] <= B:
    dq.append(next1)
    visit[next1[0]] = True

  if visit[next2[0]] == False and next2[0] <= B:
    dq.append(next2)
    visit[next2[0]] = True

print(-1)

# 풀이

  • BFS를 이용한 전형적인 최단거리 탐색이다.
  • next로 append할 조건에 유의한다. *2와 *10 + 1 두가지 경우이다.
  • 종료조건에 대한 고민이 필요하며, 종료조건은 B의 값을 넘었을때이다. 다시 뒤로 돌아올 일은 없기 때문에 해당 값을 지나치면 풀 수 없는 문제다.

 

저작자표시 (새창열림)

'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글

[백준1149&파이썬] DP를 사용할때 확정되는 값에 대한 명확한 근거를 찾자  (1) 2023.05.08
[백준1991&파이썬] 파이썬에서 이진트리의 전위,중위,후위 간단히 수행해보자.  (0) 2023.05.06
[백준2407&파이썬] 조합의 경우의 수를 구할때는 수학 공식을 이용하자  (0) 2023.05.04
[백준5525&파이썬] 문자열을 탐색하는 방법(KMP를 시도했으나 실패..)  (1) 2023.05.03
[백준7662&파이썬] 이중 우선순위 큐를 만들고 관리하기(중복값 처리에 대해 항상 생각하자)  (0) 2023.05.02
    '•알고리즘(Algorithm )/문제풀이' 카테고리의 다른 글
    • [백준1149&파이썬] DP를 사용할때 확정되는 값에 대한 명확한 근거를 찾자
    • [백준1991&파이썬] 파이썬에서 이진트리의 전위,중위,후위 간단히 수행해보자.
    • [백준2407&파이썬] 조합의 경우의 수를 구할때는 수학 공식을 이용하자
    • [백준5525&파이썬] 문자열을 탐색하는 방법(KMP를 시도했으나 실패..)
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바