알고리즘 문제 풀이/백준

[백준] 1로 만들기 - python[ DP ]

2023. 10. 30. 13:53
목차
  1. 시도횟수 2회
  2. 틀린코드
  3. 성능 요약
  4. 분류
  5. 문제 설명
  6. 입력
  7. 출력
  8. 나의 틀린 풀이
  9. 나의 맞은 풀이

[Silver III] 1로 만들기 - 1463

문제 링크

시도횟수 2회

첫 시도는 문제 이해를 잘못한 부분에서 틀렸다.
당연히 나누기를 먼저하는 것이 빠르겠거니 접근했고, 그렇다고 해도 2로 나누는 경우를 1순위로 해야하지만 3으로 나눌경우를 1순위로 하는 코드를 작성하였다.
다시 풀어볼 때는 DP로 접근하여 문제를 해결했다.

틀린코드

import sys
x = int(sys.stdin.readline())
count =0
while True:
    if x%3 == 0 : 
        x//=3
        count+=1
    else: break
while True:
    if x%2 == 0 : 
        x//=2
        count+=1
    else: break
count += (x-1)
print(count)

성능 요약

메모리: 38732 KB, 시간: 692 ms

분류

다이나믹 프로그래밍(dp)

문제 설명

정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.

  1. X가 3으로 나누어 떨어지면, 3으로 나눈다.
  2. X가 2로 나누어 떨어지면, 2로 나눈다.
  3. 1을 뺀다.

정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.

입력

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

출력

첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.

나의 틀린 풀이

그냥 생각없이 풀었다가 시간초과 났음

역시 코딩전에 생각하는 글을 쓰는 것이 좋은듯 합니다.

stack = [[int(input()),0]]
small = 10**6

while stack:
    n = stack.pop()
    if n[0] == 1:
        small = min(small,n[1])
    if small <= n[1]:
        continue
    elif n[0] == 1 : 
        small = n[1]
    if n[0] %3 ==0 : 
        stack.append([n[0]/3,n[1]+1])
    if n[0] %2 == 0:
        stack.append([n[0]/2,n[1]+1])
    stack.append([n[0]-1 , n[1]+1])
print(small)

나의 맞은 풀이

시간초과를 봤기 때문에 DP를 사용하기로 했습니다.

n = int(input())
dp = [n for i in range(n+1)]
dp[n] = 0
for i in range(n,0,-1):
    if i%3 ==0 :
        val = i//3
        dp[val] = min(dp[val],dp[i]+1)
    if i % 2 == 0:
        val = i//2
        dp[val] = min(dp[val],dp[i] +1)
    val = i-1
    dp[val] = min(dp[val],dp[i]+1)
print(dp[1])

'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글

[백준] 8진수 2진수 - python[ 구현 ]  (0) 2024.09.09
[백준] 곱셈- python[ 구현 ]  (0) 2023.11.13
[백준] 최단경로- python[ Dijkstra ]  (1) 2023.11.01
[백준] 평범한 배낭 - python[ dp ]  (0) 2023.10.31
백준 이중 우선순위 큐 - 7662  (0) 2023.03.29
  1. 시도횟수 2회
  2. 틀린코드
  3. 성능 요약
  4. 분류
  5. 문제 설명
  6. 입력
  7. 출력
  8. 나의 틀린 풀이
  9. 나의 맞은 풀이
'알고리즘 문제 풀이/백준' 카테고리의 다른 글
  • [백준] 곱셈- python[ 구현 ]
  • [백준] 최단경로- python[ Dijkstra ]
  • [백준] 평범한 배낭 - python[ dp ]
  • 백준 이중 우선순위 큐 - 7662
잘잔디
잘잔디
4학년이 되고 취업 준비를 위해 2023-01-01부터 공부한 내용을 정리한 블로그입니다.
MBCS 공부일지4학년이 되고 취업 준비를 위해 2023-01-01부터 공부한 내용을 정리한 블로그입니다.
잘잔디
MBCS 공부일지
잘잔디
전체
오늘
어제
  • 분류 전체보기 (217)
    • 파이썬 (28)
      • 파이썬 이론 (8)
      • NumPy (3)
      • Pandas (6)
      • 파이썬 시각화 (8)
      • 응용 (2)
    • Java (3)
    • Back (38)
      • DataBase이론 (12)
      • MySQL (2)
      • JSP (8)
      • JSTL (2)
      • Spring (0)
      • Django (8)
      • MongoDB (6)
      • FastAPI (0)
    • Front (8)
      • HTML (3)
      • CSS (2)
      • JS (1)
    • 회고록 (10)
    • 알고리즘 문제 풀이 (95)
      • 알고리즘 이론 공부 (14)
      • 프로그래머스 (69)
      • 백준 (12)
    • 머신러닝 (0)
    • 딥러닝 (0)
    • Git (3)
    • R 프로그래밍 (3)
    • 빅데이터 관리 (16)
      • 리눅스 (4)
      • Hadoop (12)
    • AWS (2)
    • 일상 (10)
      • 책 리뷰 (5)
      • TOEIC (2)
      • 자잘하게 공부한 것들 (2)
    • 사이버보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 골드
  • git
  • 즐거웠다
  • JavaScript
  • db
  • JS
  • 독산역
  • Database
  • CSS
  • web
  • OOP
  • 백준
  • Encore
  • 이중우선순위 큐
  • backend
  • Java
  • 객체지향
  • HTML
  • playdata

최근 댓글

최근 글

hELLO · Designed By 정상우.
잘잔디
[백준] 1로 만들기 - python[ DP ]
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.