p_ce1052   4년 전

저는 가벼운 박스부터 매다는 쪽으로 문제를 풀었는데 그러면 반례가 생기더라구요.

반례 케이스를 손으로 해보면서 제 방식이 틀리고 무거운 박스부터 할당하는게 맞게 나온다는건 확인했는데 제가 논리력이 안좋아서 왜 가벼운 것부터 하면 안되는지 이유를 모르겠습니다. 가벼운 것부터 하면 안된다는걸 어떻게 증명해야 할지 모르겠어요. 그리디로 분류되는 문제라고 생각하는데 종만북에 나온 것처럼 증명 해주실분 계신가요?

xofyd99   4년 전

2

1 2

4

1 1 2 2


증명까지는 아니고 제가 이해한대로 말씀드릴게요

위의 예시에서 가벼운 박스부터 매달게 되면, 남은 박스는 2 2가 됩니다.

그럼 첫번째 크레인은 남은 박스를 옮길 수 없게 되죠.

무게2인 박스를 옮길 수 있는 크레인이 무게1인 박스를 옮겨버리니까, 무게1인 박스를 옮길 수 있는 크레인은 다음 순서에 아무것도 안하게 되버립니다.

만약 무게2인 박스를 옮길 수 있는 크레인이 처음에 무게2를 옮겼다면, 무게1인 박스를 옮길 수 있는 크레인은 다음 순서에 한 번 더 가동될 수 있는 거죠.

ohnena   3년 전

위의 분이 설명해주신걸 보고, 저도 갈피를 잡게되었네요. 감사합니다. ㅠ

정리차원에서 간단하게 적어보자면,


오름차순이 아니고 내림차순인 이유는 간단합니다. 

박스와 크레인을 모두 내림차순해서 일을 시작해야, "시간대비 작업효율"이 가장 좋기때문입니다.


먼저 오름차순으로 했을때를 생각해봅시다. 처음엔 만나는 박스들이 다들 가벼우니 작은 크레인, 큰 크레인 너나 할 것없이모두 함께 열심히 처리합니다.

그런데 시간이 흐르면 흐를 수록 박스들이 무거워져가서 작은 크레인들은 점점 놀고먹은 수가 많아지고 큰 크레인들만 죽어라 일합니다. 쉬지도 못하구요. 

처음부터 가벼운 박스들은 작은 크레인들에게 맡기고, 큰 크레인들은 애초에 자기 체급에 맞는 녀석들을 상대했다면 

지금같은 상황은 없었을 겁니다.


반면에 내림차순을 생각해봅시다. 처음부터 가장 무거운 박스들부터 만나기때문에, 시작단계부터 모든 크레인들은 자기가 처리할 수 있는 녀석들중 가장 무거운 녀석들을 만나서 처리하게 됩니다.

그리고 시간이 흐를수록 크레인들모두가 이전에 상대한 박스들보다 점점더 가벼운 녀석들을 만나게 되므로, 최대한 노는 크레인들 없이 일을 진행시킬 수가 있을 것입니다.

적고 보니 무슨 작업 감독관같은 이야기처럼 되어버렸네요. 하하. 

어쨌든 결론은 > 일처리하는 전략의 차이인데 이 경우엔 내림차순"시간대비 작업효율"의 측면에서 더 낫다는 것입니다.


(보기싫게 길어질까봐 글을 최대한 짧게 적어보았습니다. 최대한 쉽게 설명해보려고 했는데 어설프네요 죄송합니다)

댓글을 작성하려면 로그인해야 합니다.