-
최고의 집합프로그래머스(Programmers) 2020. 2. 8. 16:27반응형
https://programmers.co.kr/learn/courses/30/lessons/12938
코딩테스트 연습 - 최고의 집합 | 프로그래머스
자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 집합으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합 예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다. { 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 } 그중 각 원소의 곱이 최대인 { 4, 5 }
programmers.co.kr
예전에 풀었던 문제인대 조금더 우아하게 짤수는 없으려나
#include <string> #include <vector> using namespace std; vector<int> returnError() { vector<int> warning; warning.push_back(-1); return warning; } vector<int> solution(int no, int sum) { const int findMAX = no; vector<int> answer; // 1. 집합 불변식? 집합의 값이 원소의 합보다 크다면 에러 if(no > sum) { return returnError(); } // 2. 첫 번째 집합의 원소를 찾는다. int cond = sum / no; answer.push_back(cond); sum = sum - cond; // 3. 하나의 원소를 찾았으니 구할 원소를 감소 한다. no--; // 4. 임시 변수를 생성하여 반복문 내의 키 변수로 만든다. int key = no; // 5. 초기문은 찾아야할 [원소 - 1], 조건문은 찾아야 할 원소로 설정 for(int i=findMAX-no; i< findMAX; i++) { // 6. 반복문 내에서는 [2]의 동작을 반복한다. cond = sum / key; answer.push_back(cond); sum -= cond; key--; } return answer; }
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
도둑질 (0) 2020.02.08 코딩테스트 연습 > 해시 > 위장 (0) 2020.02.06 완전탐색 > 모의고사 (0) 2020.02.06 2017 팁스타운 > 짝지어 제거하기 (0) 2020.02.06 완전탐색 > 소수 찾기 (0) 2020.02.05