알고리즘/백준
BOJ) 상자넣기
Zin0_0
2020. 6. 23. 13:44
반응형
상자넣기
1965번: 상자넣기
정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 ��
www.acmicpc.net
풀이
일렬로 정렬된 상자들에서 앞의 상자 크기가 뒤에보다 작으면, 뒤에 상자에 넣어 정리하는 문제였다.
dp로 푸는게 적합하겠다는 생각을 하고 코드를 작성했다.
박스를 순차적으로 탐색하면서, 이전의 박스들 중 가장 많이 저장된 박스에 담는 dp를 만들었다.
이때, 앞의 상자 크기가 뒤에 상자 크기보다 작아야한다는 조건을 걸어서 저장하면서, 쉽게 답을 구할 수 있었다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BoxPackaging_1965 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] numArr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
numArr[i] = Integer.parseInt(st.nextToken());
}
System.out.println(solution(numArr,n));
br.close();
}
private static int solution(int[] numArr, int n) {
int answer =0;
int[] dp = new int[n];
for(int i=0; i<n; i++) {
for(int j =0; j<i; j++) {
if(numArr[i] > numArr[j]) {
dp[i] = Math.max(dp[i], dp[j]);
}
}
answer = Math.max(answer, ++dp[i]);
}
return answer;
}
}
반응형