free from

[백준] 5721 사탕 줍기 대회 본문

개발/알고리즘

[백준] 5721 사탕 줍기 대회

고양이레옹이 2018. 11. 30. 20:55
반응형

문제소개


5721 사탕 줍기 대회 복잡한 부분을 어떻게 하면 간단하게 정리할 수 있을까를 생각하는게 중요한 것 같습니다.

아래 그림과 같이 3 X 3 칸에서 11개의 사탕을 줍는다면 윗 줄,아랫 줄, 좌, 우의 사탕은 먹지 못합니다. 

못 먹는 사탕을 0으로 바꾸는 작업을 하게 된다면.. 문제는 미궁 속으로 빠집니다. 

이러한 복잡한 부분을 어떻게 간단하게 바꿀 수 있을까요?

 

 

 

 

 

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

 

 

 

문제풀이

 


 

 

 

 

 

1 8
1 7 3 5 2
1 2 10 3 10
8 4 7 9 1
7 1 3 1

 

 

 

 

 

다음과 같은 그림이 있습니다. 3 X 3 칸에서 10개의 사탕을 줍는다면 윗 줄, 아랫 줄은 못 먹습니다. 그러나 3 X 3이 속한 3행의 1, 10은 먹을 수 있습니다. 그럼 선택한 행에서는 최대한 많이 사탕을 줍는 것이 현명합니다. 

→ 각 행에서 가장 많이 사탕을 줍는 개수로 정리할 수 있으며 간단한 DP로 해결할 수 있습니다.

1  ... i-2 i-1 i

 

 

DP[i] = 1부터 i 번까지 주운 최대 사탕 

DP[i] = max(DP[i-1], DP[i-2] + i 번째 사탕)

 

 

1 8       17
1 7 3 5 2       12
1 2 10 3 10    ▷   21
8 4 7 9 1       17
7 1 3 1       16

 

다음과 같이 간단하게 정리 할 수 있으며 

한 행에서 주운 최대 사탕 개수와 동일한 방법으로

한 열에서 주운 최대 사탕 개수로 해결할 수 있습니다.

 


소스보기

 

728x90

'개발 > 알고리즘' 카테고리의 다른 글

[백준] 3108 로고  (0) 2018.12.15
[백준] 1199 오일러 회로  (0) 2018.12.08
[백준] 2806 DNA 발견  (0) 2018.11.26
[백준]1669 멍멍이 쓰다듬기  (0) 2018.11.25
[백준] 2305 자리배치  (0) 2018.11.24
Comments