오늘도~~!!!! Keep Going! 두려워하는 것을 매일 차근차근 한다면 두려움 보다는 설레임이 더 커진다!
49장. 블록의 최댓값
현수에게 정면에서 본 단면과 오른쪽 측면에서 본 단면을 주고 최대 블록 개수를 사용하여 정면과 오른쪽 측면에서 본 모습으로 블록을 쌓으라고 했다. 현수가 블록을 쌓는데 사용해야 할 최대 개수를 출력하는 프로그램을 작성하세요.
입력
첫 줄에 블록의 크기 N(3<=N<=10)이 주어진다. 블록의 크기는 정사각형 N*N이다. 두 번째 줄에 N개의 정면에서의 높이 정보가 왼쪽 정보부터 주어진다. 세 번째 줄에 N개의 오른쪽 측면 높이 정보가 앞쪽부터 주어진다. 블록의 높이는 10 미만이다.
출력
첫 줄에 블록의 최대 개수를 출력한다.
1 |
|
이거는 처음에는 당황스럽지만 막상 풀면 그렇게 어렵지 않은 문제! 배열을 두개로 받고, 그 하나하나의 원소 값들 중 최솟값을 선택해서 result 이차원 배열에 넣어주면 되는 문제였다.
50장. 영지(territory) 선택
세종대왕은 현수에게 현수가 다스릴 수 있는 영지를 하사하기로 했다. 전체 땅은 사각형으로 표시된다. 그 사각형의 땅 중에서 세종대왕이 현수가 다스릴 수 있는 땅의 크기(세로의 길이와 가로의 길이)를 정해주면 전체 땅 중에서 그 크기의 땅의 위치를 현수가 정하면 되는 것이다.
전체 땅은 사각형의 모양의 격자로 되어있으며, 그 사각형 땅 안에는 많은 오렌지 나무가 심겨져 있다. 현수는 오렌지를 무척 좋아하여 오렌지 나무가 가장 많이 포함되는 지역을 선택하고 싶어한다. 현수가 얻을 수 있는 영지의 오렌지 나무 최대 개수를 출력하는 프로그램을 작성하세요.
입력 설명
첫 줄에 H(세로길이)와 W(가로 길이)가 입력된다. (5<=H, W<=50) 그 다음 H줄에 걸쳐 각 사각형 지역에 오렌지의 나무 개수 정보가 주어진다. 그 다음 영지의 크기인 세로 길이와 가로 길이가 차례대로 입력된다.
출력 설명
첫 줄에 현수가 얻을 수 있는 오렌지 나무의 최대 개수를 출력한다.
1 |
|
4중 포문을 쓰는게.. 마음에 걸리지만 이렇게 안하고 어떻게 풀 수 있는지는 모르겠기에 그냥 구해보았다. 선생님은 어떻게 푸셨으려나?
선생님 코드
여기서는… 다이나믹 프로그래밍 을 이용해야 한다!!!!!!!!!
4중 포문은 작은 배열들에서는 잘 동작하지만, 크기가 커지면 제대로 동작하지 않는다. dynamic 배열을 하나 더 만들어서 생각을 해줘야 한다.
이렇게 다이나믹 배열을 또 따로 생각을 해주어야 한다. 필수!!
1 |
|
오늘도 또 하나 배웠다! 다이나믹 프로그래밍!!