Sum It Up
면접 대비시간 제한1초메모리 제한128 MB
목표값과 최대 12개의 수가 주어질 때, 목표값이 되는 서로 다른 부분집합 합을 모두 찾아 내림차순 사전순으로 출력한다.
문제
목표 합 와 개의 양의 정수로 이루어진 목록이 주어진다. 목록에서 수들을 골라 그 합이 정확히 가 되는 서로 다른 모든 방법을 찾아라. 각 수는 목록에 나타난 횟수만큼만 하나의 합에서 사용할 수 있으며, 수 하나만으로도 하나의 합으로 센다. 예를 들어 이고 목록이 이면 가 되는 서로 다른 합은 , , , 의 네 가지이다.
입력
입력에는 한 줄에 하나씩 하나 이상의 테스트 케이스가 주어진다. 각 줄에는 합 , 목록의 원소 개수 , 그리고 목록의 값 이 이 순서대로 공백 하나로 구분되어 주어진다. 이 인 줄은 입력의 끝을 나타내며 처리하지 않는다. 실제 테스트 케이스에서는 , 이고 각 이다. 목록의 값은 큰 값부터 작은 값 순서(비증가 순서)로 주어지며 같은 값이 여러 번 나올 수 있다.
출력
각 테스트 케이스마다 먼저 Sums of <t>: 형식의 줄을 출력한다(단어 Sums of, 공백, 합 , 콜론). 그다음 조건을 만족하는 각 합을 한 줄에 하나씩, 항들을 +로 이어 출력한다. 만족하는 합이 없으면 NONE이라는 한 줄만 출력한다. 하나의 합 안에서 수들은 비증가 순서로 나열하며, 각 값은 목록에 나타난 횟수까지만 반복할 수 있다. 합들은 항의 사전식 내림차순으로 정렬한다. 즉 첫 번째 항으로 비교하고, 같으면 두 번째 항, 그다음 세 번째 항 순서로 비교한다. 한 테스트 케이스 안의 모든 합은 서로 달라야 한다.