[프로그래머스] 숫자 변환하기
·
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은 직관적으로 값과 인덱스를 일치시키기 위함이다. 각 배열의 원소는 해당 인덱스까지 연산을 수행한 횟수를 나타낸다. 문제 입력으로 주어진 x=10, n=5, y=40을 예시로하면 아래 그림과 같다. 시작점인 DP[x] 는 ..
[2156] 포도주 시식
·
PS/백준
문제 링크 배열에서 아래와 같은 규칙에 따라 수를 선택했을 때 최대값을 찾는 문제이다.포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.연속으로 놓여 있는 3잔을 모두 마실 수는 없다.2번 조건에서의 연속으로 3잔을 모두 마실 수 없다는 것이 중요하다.예시 입력은 6, 10, 13, 9, 8, 1이 주어졌다. 이를 배열로 표현하면 아래와 같다.개발 편의상 배열의 크기를 N+1로 설정했다.dp 배열을 만들어서 i번째 까지 선택한 값의 최대값을 저장한다.dp 배열의 i번째 원소를 업데이트하는 경우의 수는 다음과 같다.i-1과 i를 선택했을 경우i와 i-2를 선택했을 경우i를 선택하지 않을 경우이 세 조건을 통해 연속으로 3개의 수를 선택하지 않도록..