https://www.acmicpc.net/problem/11256
11256번: 사탕
당신은 사탕 공장의 주인이다. 날마다, 당신은 J개의 사탕을 가게에 보내기 위해 상자에 포장해야 한다. 당신은 크기가 다른 상자 N개를 가지고 있다. 당신은 편리를 위해 상자를 최소한으로 쓰
www.acmicpc.net
풀이는 다음과 같다. (quicksort 함수는 생략했다)
문제를 푸는 것에 있어 우선시 되어야 하는 것은 문제의 목표와 문제를 푸는 방향, 즉 순서이다.
문제를 푸는 순서는 효율적으로 작성된 코드를 보고 확인 가능하다. (참고로 블로그 운영자는 컴퓨터 언어에 있어서 초심자이다)
간단하게 필자 본인이 이 문제를 푸는 과정을 설명해 보겠다.
첫 번째로 이 문제의 목표를 알아야 한다.
이 문제의 목표는 사탕을 담을 박스를 "최소"로 줄이는 것이다.
두 번째로 무엇을 입력받아야 하는 가와 그것의 용도를 파악해야 한다.
t는 경우의 수, n은 존재하는 박스의 개수, candy(문제에의 J)는 사탕의 개수를 나타낸다.
세 번째로 용도에 맞추어 목표를 이루어 가면 된다.
t의 목적에 맞게 반복문을 설정하고, 필요에 따라 추가한 box[] 배열에 데이터를 입력받는다.
이후 목적인 박스의 개수 줄이기를 위해, 가장 큰 박스부터 사용하는 중간 목표를 설정한다.
이를 위하여 box 배열을 내림차순으로 정렬하고, cnt에 박스의 최대 수용량을 더한다.
이를 통하여 박스 사용을 최소한으로 줄일 수 있게 된다.
이렇게 세 단계에 나누어 이 문제를 손쉽게 풀 수 있었다. 만약 보다 어려운 문제를 마주치게 된다면, 더욱 세분된 단계와 여러 중간 목표를 나누어 문제를 해결해 나갈 수도 있을 것이다.