본문 바로가기

PS/백준

[2156] 포도주 시식 문제 링크 배열에서 아래와 같은 규칙에 따라 수를 선택했을 때 최대값을 찾는 문제이다.포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.연속으로 놓여 있는 3잔을 모두 마실 수는 없다.2번 조건에서의 연속으로 3잔을 모두 마실 수 없다는 것이 중요하다.예시 입력은 6, 10, 13, 9, 8, 1이 주어졌다. 이를 배열로 표현하면 아래와 같다.개발 편의상 배열의 크기를 N+1로 설정했다.dp 배열을 만들어서 i번째 까지 선택한 값의 최대값을 저장한다.dp 배열의 i번째 원소를 업데이트하는 경우의 수는 다음과 같다.i-1과 i를 선택했을 경우i와 i-2를 선택했을 경우i를 선택하지 않을 경우이 세 조건을 통해 연속으로 3개의 수를 선택하지 않도록..
[13397] 구간 나누기2 문제 링크주어진 배열을 M개로 나누었을 때 구간의 점수들의 최댓값의 최솟값을 구하는 문제이다.예를 들어, 배열이 [1, 5, 4, 6, 2, 1, 3, 7] 이고, M = 3인 경우가 있다.이때, [1, 5], [4, 6, 2], [1, 3, 7]로 구간을 나누면 각 구간의 점수는 4, 4, 6점이 된다. 이때, 최댓값은 6점이다.만약, [1, 5, 4], [6, 2, 1], [3, 7]로 구간을 나누었다면, 각 구간의 점수는 4, 5, 4점이 되고, 이때 최댓값은 5점이 된다. 이 문제를 풀기 위해 아래의 방법으로 접근했다.먼저 최솟값을 설정하고, 이 최솟값을 만족하기 위해 배열이 몇 개로 나누어지는지 구한다.나누어진 배열의 갯수가 M보다 크다면 목표 최솟값을 높이고, M보다 작다면 목표 최솟값을 낮춘..