PS/백준

실버3 1로 만들기(1463)

2023. 12. 30. 16:57
 

1463번: 1로 만들기

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

www.acmicpc.net

DP문제를 잘 몰라서 처음에는 8까지 모든 경우의 수를 적었다. 적고 보니 어떻게 풀어야할 지 보여서 쉽게 풀 수 있다. 3이나 2로 나눠지면 best를 업데이트를 했다. 최소값만 넣을 수 있게 min을 활용해서 풀고, 마지막에 append하기 전에 min값을 넣었다. 이렇게 풀고 성공(832ms)은 했는데 생각을 해보니 굳이 인덱스를 넣을 필요가 없다는 것을 알게 되었다.

import sys
input = sys.stdin.readline

num = int(input())
memo = [(0,0), (1,0)]
for i in range(2, num+1):
  best = 99999999
  if i % 3 == 0:
    best = memo[i//3][1]+1
  if i % 2 == 0:
    best = min(memo[i//2][1]+1, best)
  memo.append((i, min(memo[i-1][1]+1, best)))

print(memo[num][1])

그래서 아래와 같이 다시 풀었더니 조금 더 줄어든 632ms로 나왔다. 그래서 좀 더 줄 일 수 없을까 했는데 또 고민해보니 best를 저렇게 초기화하지 않고, 처음부터 1을 뺀 값을 넣어서 min값을 업데이트를 하게 만들었다.

import sys
input = sys.stdin.readline

num = int(input())
memo = [0, 0]
for i in range(2, num+1):
  best = 99999999
  if i % 3 == 0:
    best = memo[i//3]+1
  if i % 2 == 0:
    best = min(memo[i//2]+1, best)
  memo.append(min(memo[i-1]+1, best))

print(memo[-1])

아래와 같이 구현해서 580ms로 줄일 수 있었다.

import sys
input = sys.stdin.readline

num = int(input())
memo = [0, 0]
for i in range(2, num+1):
  best = memo[i-1]+1
  if i % 2 == 0:
    best = min(memo[i//2]+1, best)
  if i % 3 == 0:
    best = min(memo[i//3]+1, best)
  memo.append(best)

print(memo[-1])

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

실버1 z(1074)  (1) 2023.12.31
실버3 구간 합 구하기 4(11659)  (0) 2023.12.30
골드5 뱀과 사다리 게임(16928)  (1) 2023.12.28
골드5 토마토(7569)  (0) 2023.12.27
골드5 토마토(7576)  (1) 2023.12.26
'PS/백준' 카테고리의 다른 글
  • 실버1 z(1074)
  • 실버3 구간 합 구하기 4(11659)
  • 골드5 뱀과 사다리 게임(16928)
  • 골드5 토마토(7569)
jjw000628
jjw000628
jjw000628
wldnd2
jjw000628
전체
오늘
어제
  • 분류 전체보기 (27)
    • Skill Up (1)
      • Algorithm Theory (1)
      • Java (0)
      • JS (0)
      • 프로젝트 및 회고 (0)
    • PS (23)
      • 백준 (15)
      • 프로그래머스 (8)
    • Lab (3)
      • Basic Concept (0)
      • 무선 이동 통신 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 무선
  • JS
  • 그래프탐색
  • 알고리즘
  • C++
  • 정규식
  • 재귀
  • 프로그래머스
  • Cpp
  • 깊이우선탐색
  • 누적합
  • BFS
  • 네트워크
  • 너비우선탐색
  • 그래프
  • 브루트포스
  • 문자열
  • 파싱
  • dfs
  • 백준
  • 분할정복
  • 파이썬
  • DP

최근 댓글

최근 글

hELLO · Designed By 정상우.
jjw000628
실버3 1로 만들기(1463)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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