최대이익 계산하기
가로,세로의 크기가 N*N인 이익이 있다.
이익을 얻을 때는 가로 혹은 세로 절반으로 나누어 한쪽 절반에 해당하는 부분을 모두 활용하여 얻는다.
특정부분을 모두 활용하여 개발할 때 얻을 수 있는 이익은, 해당 부분에서 얻을 수 있는 이익 중 최댓값이다.
예를들어
0 2 3 4
5 1 8 8
3 2 9 4
4 1 7 5 이면
0 2
5 1
3 2
4 1
3 4
8 8
9 4
7 5
4 1 7 5
이렇게 4가지 선택지가 있다.
각각의 선택지에 대하여 얻을 수 있는 이익은, 해당 면적에서 얻을 수 있는 이익의 최댓값으로, 이는 순서대로
8,5,9,9 이다.
이렇게 이익을 얻고나면, 해당면적은 더이상 이익을 얻을 수 없고 남은 면적을 반복하여 이익을 얻는다.
예를들어 처음에 왼쪽 절반에서 이익을 얻었다면, 오른쪽 절반을 상/하/좌/우로 나누어 이익을 얻어야한다.
맨 마지막에는 결국 두 개의 칸이 남게된다.
그 두개의 칸을 또 절반으로 나누어 한 개의 칸에서 이익을 얻으면, 마지막 최종적으로 하나의 칸이 남게된다. 이와 같이 남은 칸이 1개일 경우에는 해당 칸에서 이익을 얻을 수 없어 이익얻기를 종료한다.
위 규칙을 토대로 예시의 이익을 모두 얻었을 때 최대 30만큼의 이익을 얻을 수 있다.
입력
첫 번째 줄에 N을 입력받는다.
N=2,4,8,16,32 중 하나
이후 N 개의 줄에 대하여 공백을 구분자로 얻을 수 있는 이익을 입력받는다. (모두 양의 정수이다)
1<=얻을 수 있는 이익<=100,000
출력
얻을 수 있는 이익의 합 중 최댓값을 출력한다.
이익의 합<=1,000,000
입력 예시
4
출력 예시
30
제가 짠 것은 아래코드인데
계속 이상하게 돌더라구요 ㅠㅠ 규칙을 잘못찾는건지...
혹시 row와 col을 어떻게 돌려야할 지 알려주실 수 있나요?
댓글을 작성하려면 로그인해야 합니다.
pgh94a 3년 전
최대이익 계산하기
가로,세로의 크기가 N*N인 이익이 있다.
이익을 얻을 때는 가로 혹은 세로 절반으로 나누어 한쪽 절반에 해당하는 부분을 모두 활용하여 얻는다.
특정부분을 모두 활용하여 개발할 때 얻을 수 있는 이익은, 해당 부분에서 얻을 수 있는 이익 중 최댓값이다.
예를들어
0 2 3 4
5 1 8 8
3 2 9 4
4 1 7 5 이면
0 2 3 4
5 1 8 8
0 2
5 1
3 2
4 1
3 4
8 8
9 4
7 5
3 2 9 4
4 1 7 5
이렇게 4가지 선택지가 있다.
각각의 선택지에 대하여 얻을 수 있는 이익은, 해당 면적에서 얻을 수 있는 이익의 최댓값으로, 이는 순서대로
8,5,9,9 이다.
이렇게 이익을 얻고나면, 해당면적은 더이상 이익을 얻을 수 없고 남은 면적을 반복하여 이익을 얻는다.
예를들어 처음에 왼쪽 절반에서 이익을 얻었다면, 오른쪽 절반을 상/하/좌/우로 나누어 이익을 얻어야한다.
맨 마지막에는 결국 두 개의 칸이 남게된다.
그 두개의 칸을 또 절반으로 나누어 한 개의 칸에서 이익을 얻으면, 마지막 최종적으로 하나의 칸이 남게된다. 이와 같이 남은 칸이 1개일 경우에는 해당 칸에서 이익을 얻을 수 없어 이익얻기를 종료한다.
위 규칙을 토대로 예시의 이익을 모두 얻었을 때 최대 30만큼의 이익을 얻을 수 있다.
입력
첫 번째 줄에 N을 입력받는다.
N=2,4,8,16,32 중 하나
이후 N 개의 줄에 대하여 공백을 구분자로 얻을 수 있는 이익을 입력받는다. (모두 양의 정수이다)
1<=얻을 수 있는 이익<=100,000
출력
얻을 수 있는 이익의 합 중 최댓값을 출력한다.
이익의 합<=1,000,000
입력 예시
4
0 2 3 4
5 1 8 8
3 2 9 4
4 1 7 5
출력 예시
30
제가 짠 것은 아래코드인데
계속 이상하게 돌더라구요 ㅠㅠ 규칙을 잘못찾는건지...
혹시 row와 col을 어떻게 돌려야할 지 알려주실 수 있나요?