-
[프로그래머스] 두 개 뽑아서 더하기 c++Coding Test/programmers 2022. 9. 13. 13:51728x90
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한 사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 풀이
순열을 사용한 조합 구하는 방법을 사용했습니다.
nCr = numbers.size() C 2
조합을 구하기 위해서 보조 수열이 필요합니다.
1.보조 수열은 numbers사이즈 크기로 생성하고, 0으로 초기화 합니다.
2. 2개만 뽑아야 하니, 보조 수열의 맨 뒤에서 부터 2개의 원소를 1로 변경합니다.
3.결과 값을 저장하는 벡터의 오름차순 정렬, 중복 제거를 마지막에 적용시킵니다.
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(vector<int> numbers) { vector<int> answer; int len = numbers.size(); vector<int> visit(len, 0); visit[len-1] = 1; visit[len-2] = 1; int sum = 0; do{ for(int i = 0; i < len; i++){ if(visit[i] != 0){ sum += numbers[i]; } } answer.push_back(sum); sum = 0; }while(next_permutation(visit.begin(), visit.end())); sort(answer.begin(), answer.end()); answer.erase(unique(answer.begin(), answer.end()), answer.end()); return answer; }
다른 방법
중복을 허용하지 않는 set을 사용하여
이중 for문으로 접근하는 방법입니다.
#include <string> #include <vector> #include <algorithm> #include <set> using namespace std; vector<int> solution(vector<int> numbers) { vector<int> answer; set<int> st; for(int i = 0;i<numbers.size();++i){ for(int j = i+1 ; j< numbers.size();++j){ st.insert(numbers[i] + numbers[j]); } } answer.assign(st.begin(), st.end()); return answer; }
728x90'Coding Test > programmers' 카테고리의 다른 글
[프로그래머스] 양궁대회 c++ (2) 2022.09.26 [프로그래머스] 체육복 c++ (0) 2022.09.13 [프로그래머스] 3진법 뒤집기 c++ (0) 2022.09.13 [프로그래머스] 약수의 개수와 덧셈 c++ (0) 2022.09.13 [프로그래머스] 문자열을 정수로 바꾸기 c++ (0) 2022.09.12 - numbers의 길이는 2 이상 100 이하입니다.