[Python] BOJ / 16953번 / A → B

2023. 4. 25. 13:36·🥇 Problem Solving/Greedy
 

16953번: A → B

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

www.acmicpc.net

 

📝 문제

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다. 

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

 

📜 풀이

  • 탑다운(Top-down) 방식으로 생각하면 쉽게 구현할 수 있음
  • 문제에 제시된 두 가지 연산 중에서 속도적으로 우위를 점할 수 있는 연산은 '1을 수의 가장 오른쪽에 추가한다'는 연산이므로 해당 연산을 우선적으로 수행하도록 해주어야 함
  • 예를 들어, 40021이라는 숫자가 있을 때, 이는 4002에서 1을 추가함으로써 만들 수 있으며 이를 판단하는 방법은 10으로 나누었을 때 나머지가 1이라면 해당 연산을 수행할 수 있음
  • 또한, 4002라는 숫자가 있을 때, 이는 2001에서 2를 곱함으로써 만들 수 있으며 이를 판단하는 방법은 2로 나누었을 때 나머지가 0이라면 해당 연산을 수행할 수 있음
  • 만약 위 두 가지 경우에 속하지 않는다면, 문제에 제시된 두 가지 연산만으로는 A에서 B로 바꿀 수 없다는 것을 의미함

 

💻 소스코드

a, b = map(int, input().split())

cnt = 0
while b > a:
    if b % 10 == 1:
        b //= 10
    elif b % 2 == 0:
        b //= 2
    else: break
    
    cnt += 1

print(cnt + 1 if a == b else -1)
저작자표시 (새창열림)

'🥇 Problem Solving > Greedy' 카테고리의 다른 글

[Python] BOJ / 1213번 / 팰린드롬 만들기  (0) 2023.04.26
[Python] BOJ / 1449번 / 수리공 항승  (0) 2023.04.26
[Python] BOJ / 1946번 / 신입 사원  (0) 2023.04.25
[Python] BOJ / 13305번 / 주유소  (0) 2023.04.24
[Python] BOJ / 2812번 / 크게 만들기  (0) 2022.06.29
'🥇 Problem Solving/Greedy' 카테고리의 다른 글
  • [Python] BOJ / 1213번 / 팰린드롬 만들기
  • [Python] BOJ / 1449번 / 수리공 항승
  • [Python] BOJ / 1946번 / 신입 사원
  • [Python] BOJ / 13305번 / 주유소
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[Python] BOJ / 16953번 / A → B
상단으로

티스토리툴바