[프로그래머스] 숫자 변환하기

2023. 2. 12. 19:42·PS/프로그래머스
반응형

링크

문제 설명

입력으로 1 이상의 정수 x 와 y 가 주어진다. 주어진 아래 연산으로 x를 y로 만든다.

  • x에 n을 더합니다
  • x에 2를 곱합니다.
  • x에 3을 곱합니다.

x를 y로 변환하는 최소 연산 횟수를 구한다. 변환할 수 없다면 -1을 반환한다.

제한사항

def solution(x: int, y: int, n: int) -> int:
        ...
  • 1 ≤ x ≤ y ≤ 1,000,000
  • 1 ≤ n < y

풀이

DP를 응용해 풀었다. 크기가 y+1인 배열을 만들어 INF로 초기화한다. +1은 직관적으로 값과 인덱스를 일치시키기 위함이다. 각 배열의 원소는 해당 인덱스까지 연산을 수행한 횟수를 나타낸다.

https://i.imgur.com/vI5dIZe.png

문제 입력으로 주어진 x=10, n=5, y=40을 예시로하면 아래 그림과 같다. 시작점인 DP[x] 는 0으로 초기화한다.

https://i.imgur.com/jI2K3Fg.png

이 DP 배열을 x 부터 y+1까지 순회하며 문제에 주어진 세가지 연산을 수행해 연산 결과값에 DP[i]+1을 해준다. 최소 횟수를 구하는 것이기 때문에 계산한 값과 배열에 저장된 값을 비교해서 더 작은값으로 바꿔야한다. 이를 빌트인함수인 min() 함수를 사용한다.

이를 계속 반복해서 수행하면 DP[y]에 y로 변환하기위한 최소 횟수가 저장된다. 이 값을 정답값으로 반환한다.

제출 코드

def solution(x: int, y: int, n: int) -> int:
    DP = [float('inf') for _ in range(y + 1)]
    DP[x] = 0

    for i in range(x, y + 1):
        if i * n <= y:
            DP[i] = min(DP[i + n], DP[i] + 1)
        if i * 2 <= y:
            DP[i] = min(DP[i * 2], DP[i] + 1)
        if i * 3 <= y:
            DP[i] = min(DP[i * 3], DP[i] + 1)

    return DP[y]
 
반응형
저작자표시 비영리 변경금지 (새창열림)
'PS/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 시소 짝궁
  • [프로그래머스] 뒤에 있는 큰 수 찾기
  • [프로그래머스] 크기가 작은 부분 문자열
  • [프로그래머스] 호텔 대실
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (116)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (1)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pytorch
    C++
    map
    select
    알고리즘
    PS
    FPS
    딥러닝
    JS
    Unreal Engine
    php
    C
    게임
    블루프린트
    redis
    CPP
    Python
    자바
    파이썬
    memcached
    NUXT
    프로그래머스
    MySQL
    언리얼엔진4
    게임 개발
    Unreal
    클래스
    JavaScript
    mscoco
    웹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[프로그래머스] 숫자 변환하기
상단으로

티스토리툴바