본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


문제링크



문제

정육면체 모양의 상자들이 일렬로 늘어서 있다. 상자들마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 있다. 예를 들어 앞에서부터 순서대로 크기가 (1, 5, 2, 3, 7)인 5개의 상자가 있다면, 크기 1인 상자를 크기 5인 상자에 넣고, 다시 이 상자들을 크기 7인 상자 안에 넣을 수 있다. 하지만 이렇게 상자를 넣을 수 있는 방법은 여러 가지가 있을 수 있다. 앞의 예에서 차례대로 크기가 1, 2, 3, 7인 상자들을 선택하면 총 4개의 상자가 한 개의 상자에 들어가게 된다.

상자들의 크기가 주어질 때, 한 번에 넣을 수 있는 최대의 상자 개수를 출력하는 프로그램을 작성하시오.

입력

파일의 첫 번째 줄은 상자의 개수 n (1≤n ≤1000)을 나타낸다. 두 번째 줄에는 각 상자들의 크기가 순서대로 주어진다.

출력

첫째 줄에 한 줄에 넣을 수 있는 최대의 상자 개수를 출력한다.


한달전에 이 문제 정답율이 47.25라는 것을 보고 내가 너무 비참했다.
난 못풀었기 때문에..... 근데 다시 보니 금방풀렸다. 뭐지 ..? 실력이 향상된 것은 아닌 것 같은데.. 
예제를 풀었다고 제출했는데 예외상황이 있었다.
예외 케이스를 찾아보았더니
7
4 5 2 1 3 4 8 에서 문제가 났다. 디버거로 돌리면 바로 나올 것이다. 화잇팅 !!




















import java.util.Scanner; public class BoxInsert { static int counter; static int[] data; static int[] cache; static int max; public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성 counter = Integer.parseInt(scan.nextLine().trim()); // 키보드 문자 입력 data = new int[counter]; cache = new int[counter]; for (int i = 0; i < counter; i++) { data[i] = (scan.nextInt()); } max = 1; for(int i = 0; i < data.length; i++) { if(cache[i] == 0) cache[i] = 1; for(int j = i+1; j<data.length; j++) { if(data[i] < data[j]) { if (cache[j] < cache[i] + 1) { cache[j] = cache[i] + 1; if(max < cache[j]) max = cache[j]; } } } } System.out.println(max); } }