백준 1463. 1로 만들기

2023. 9. 3. 16:03·백준

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

 

1463번: 1로 만들기

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

www.acmicpc.net

BFS 풀이(내풀이)

import sys
from collections import deque

def bfs(n):
    q = deque([n])
    while q:
        n = q.popleft()
        if n == 1:
            return arr[n]
        if n % 2 == 0 and not arr[n//2]:
                 arr[n//2] = arr[n] + 1
                 q.append(n//2)
        if n % 3 == 0 and not arr[n//3]:
                 arr[n//3] = arr[n] + 1
                 q.append(n//3)
        if not arr[n-1]:
                 arr[n-1] = arr[n] + 1
                 q.append(n-1)

n = int(sys.stdin.readline())
arr = [0] * (n+1)
print(bfs(n))

처음엔 arr범위를 100001이런식으로 했는데 그럴 필요가 없다...!

그리고 n의 범위도 유효한 범위가 되게 했었는데 필요없음!

하지만 원래 이문제는 DP를 이용해서 푸는 문제!


바텀업 풀이

n=int(input())
d=[0]*(n+1)  # 인덱스별 연산횟수 저장(1은 0 고정)
for i in range(2,n+1): # 2부터 n까지
    d[i]=d[i-1]+1 # 1을 빼는 연산 -> +1해줌
    if i%2==0: # 2의 배수일때 
        d[i]=min(d[i],d[i//2]+1)  # 2로 나눴을 때(2로나눈것 포함이므로 +1)의 연산횟수와 아무것도 안했을때의 연산횟수 중 작은거 저장
    if i%3==0: # 동일
        d[i]=min(d[i],d[i//3]+1)
print(d[x])  # 1까지 가는 최솟값만 저장하게 됨

탑다운 풀이(재귀)

x=int(input())
dp={1:0}
def rec(n):
    if n in dp.keys():
        return dp[n]
    if (n%3==0) and (n%2==0):
        dp[n]=min(rec(n//3)+1, rec(n//2)+1)
    elif n%3==0:
        dp[n]=min(rec(n//3)+1, rec(n-1)+1)
    elif n%2==0:
        dp[n]=min(rec(n//2)+1, rec(n-1)+1)
    else:
        dp[n]=rec(n-1)+1
    return dp[n]
print(rec(x))

 

앞에서 구한 결과값을 저장하였다가 후에 사용하는 것!

저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 1931.회의실 배정  (0) 2023.09.04
백준 11047. 동전 0  (0) 2023.09.03
백준 5014. 스타트링크  (0) 2023.09.01
백준 1697. 숨바꼭질  (0) 2023.09.01
백준 7569. 토마토  (0) 2023.08.31
'백준' 카테고리의 다른 글
  • 백준 1931.회의실 배정
  • 백준 11047. 동전 0
  • 백준 5014. 스타트링크
  • 백준 1697. 숨바꼭질
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (383)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅&리팩토링 (6)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    코딩테스트준비
    개발자취업
    99클럽
    Til
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 1463. 1로 만들기
상단으로

티스토리툴바