[백준_python] 1로 만들기 || 1463

2021. 2. 10. 19:10·🎯PS

www.acmicpc.net/problem/1463

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

이 문제는 다이나믹 프로그래밍과 관련된 문제이다.
 
다이나믹 프로그래밍이란?
큰 문제를 작은 문제로 나누어서 푸는 기법, 작은 부분 문제들이 반복되는 경우를 매번 재계산하지 않고 재사용을 하는 기법이라고 한다.
 
구현 방식으로는 bottom-up과 top-down이 있다.
bottom-up은 작은 문제부터 차근차근 푸는 것이고
top-down은 보통 우리가 아는 재귀 함수로, 큰 문제를 풀려하고 작은 문제가 풀리지 않았다면, 작은 문제를 푸는 방식이다.


2 → 1     3번째 연산을 1회 해준다.  
10 → 5 →4 →2→1이라는 방식도있지만, 10 → 9 → 3 → 1 이라는 더 적은 방식이 있다.
이처럼 1로 만들어지는 최소값을 구해주어야 한다.
점화식은 dp[n] = min(dp[n//3], dp[n//2], dp[i-1]) + 1 이다.

# 1로 만들기 (bottom-up)

N = int(input())

dp = [0 for _ in range(N+1)]  # N만큼의 리스트 생성

for i in range(2, N+1):  # 2부터 N까지 반복
    dp[i] = dp[i-1] + 1  # 3번 연산
    if i % 2 == 0 and dp[i] > dp[i//2] + 1:  # 3번보다 2번이 더 작은 경우
        dp[i] = dp[i//2] + 1
    if i % 3 == 0 and dp[i] > dp[i//3] + 1:  # 3번보다 1번이 더 작은 경우
        dp[i] = dp[i//3] + 1

print(dp[N])

3번 연산을 먼저 해준 후, 2로 나눈 것과 3으로 나눈 것 중 더 작은 것으로 선택되도록 해준다.
여기서 elif라고 해주었다가.. 틀렸다.. 각각 if문으로 꼭 모두 비교가 되도록 해주어야 했다.!
 
bottom-up으로 작은 것부터 차례대로 최소 경우가 되는 수를 넣어주며 N번째의 dp로 결과를 구해준다.
 
 
다음에 dp문제가 나오게 되면, 내 스스로 꼭 풀어보고 싶다 노력노력!
 
 
참고한 사이트)
infinitt.tistory.com/247

백준 (boj) 파이썬 - 1463 : 1로 만들기      (DP)

문제 링크 : https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 분류 : 다이나믹 프로그래밍 https://infini..

infinitt.tistory.com

 

반응형
'🎯PS' 카테고리의 다른 글
  • [백준_python] 소수 구하기 || 1929
  • [백준_python] 1, 2, 3 더하기 || 9095
  • [백준_python] 회전하는 큐 || 1021(global, deque.rotate())
  • [백준_python] 패션왕 신해빈 || 9375
dmaolon
dmaolon
프로그래밍을 공부한 내용을 기록하는 공간입니다.
  • dmaolon
    기록 남기기
    dmaolon
  • 전체
    오늘
    어제
    • ALL (260)
      • ➰ Series (5)
      • 🎯PS (168)
        • Algorithm (15)
      • ☕ Java (11)
      • 🍀 Spring Boot (29)
      • 💬 Database (9)
      • 🐣 Computer Science (14)
      • 👍 Daily (4)
      • 🎁ReactJS (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    프로그래밍
    BFS
    백준
    프로그래머스
    자바
    코딩
    dfs
    알고리즘
    파이썬
    Spring
  • hELLO· Designed By정상우.v4.10.1
dmaolon
[백준_python] 1로 만들기 || 1463
상단으로

티스토리툴바