[BOJ] 1965. 상자넣기

2022. 12. 11. 18:04·algorithm

문제

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

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


입력
파일의 첫 번째 줄은 상자의 개수 n (1 ≤ n ≤ 1000)을 나타낸다. 두 번째 줄에는 각 상자의 크기가 순서대로 주어진다. 상자의 크기는 1,000을 넘지 않는 자연수이다.


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


해결 방법

  • dp 사용하는 문제
  • 상자 배열을 선언한다.
  • 반복문으로 상자 배열을 탐색하면서 현재 위치보다 이전 위치의 상자 크기가 더 작으면 dp[현재 위치], dp[이전 위치]+1 중 더 큰 값을 구한다.
    • dp[현재위치] = 1로 초기화 되어있다.
    • map이 {1,6} 이라면 max = dp[0] + 1 = 2가 된다.
    • 즉, 상자에 2개를 넣을 수 있다는 뜻이다.
  • 최대 상자 개수를 dp[i] 와 비교하여 갱신한다.
  • 최대 상자 개수를 출력한다.

코드

// 상자 넣기
public class Week09_1965 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] boxes = new int[n];
        int[] dp = new int[n];

        String[] temp = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            boxes[i] = Integer.parseInt(temp[i]);
        }

        int result = 0;
        for (int i = 0; i < n; i++) {
            dp[i] = 1; // 자기 자신
            for (int j = 0; j < i; j++) {
                if (boxes[j] < boxes[i]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1); // 자신보다 작은 것들 + 자기 자신(+1)
                }
            }
            result = Math.max(result, dp[i]); // 최대 상자 개수 갱신
        }

        System.out.println(result);
    }
}
저작자표시 (새창열림)

'algorithm' 카테고리의 다른 글

[BOJ] 13915. 현수의 열기구 교실  (0) 2022.12.11
[BOJ] 4358. 생태학  (0) 2022.12.11
[BOJ] 1890. 점프  (0) 2022.12.11
[BOJ] 1003. 피보나치 함수  (1) 2022.12.11
[BOJ] 4963. 섬의 개수  (0) 2022.12.11
'algorithm' 카테고리의 다른 글
  • [BOJ] 13915. 현수의 열기구 교실
  • [BOJ] 4358. 생태학
  • [BOJ] 1890. 점프
  • [BOJ] 1003. 피보나치 함수
siio
siio
  • siio
    siio's blog
    siio
  • 전체
    오늘
    어제
    • category (47)
      • Projects (4)
      • Java (1)
      • Spring (0)
      • DevOps (0)
      • algorithm (42)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    10971
    jvm
    git #github #협업프로세스
    외판원순회
    BufferedReader
    dfs
    same site
    Knapsack
    JDK
    jre
    DP
    Cross Domain
    risingcamp
    ncp
    SWYP
    Scanner
    http only cookie
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
siio
[BOJ] 1965. 상자넣기
상단으로

티스토리툴바