728x90
내 풀이
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
vector<int>::iterator isFind;
for (int i = 0; i < numbers.size()-1; i++) {
for (int j = i+1; j < numbers.size(); j++) {
isFind = find(answer.begin(), answer.end(), numbers[i] + numbers[j]);
if (isFind == answer.end()) answer.push_back(numbers[i] + numbers[j]);
}
}
sort(answer.begin(), answer.end());
return answer;
}
1. 함수에 들어온 배열에서 0~(맨끝-1) 을 도는 i와 1~(맨끝) 을 도는 j를 두어 두개의 수끼리의 합을 모두 구하도록 포문을 두었다.
2. 포문을 돌면서 배열안의 두수끼리의 합이 answer에 있는지를 algorithm 헤더에 들어있는 find로 찾았다. 처음엔 auto로 두었고 설명에서 find의 반환값이 vector<int>::iterator 형식으로 나온다는 것을 알고 그렇게 고쳤다.
3. find가 값을 찾지 못해서 isFind가 answer.end가 되면 answer에 없다는 것이므로 추가한다.
4. answer을 sort로 정렬해 반환한다.
다른사람 풀이
#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;
}
set이 중복을 허용하지 않는 점을 이용해 코드 길이를 더 줄이고, assign을 이용해 answer를 채웠다.
효율적인 것 같아 다음에 써보고 싶다.
'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글
[C++] 프로그래머스 - 모의고사 (0) | 2021.07.02 |
---|---|
[C++] 프로그래머스 - 폰켓몬 (set) (0) | 2021.06.29 |
[C++] 프로그래머스 - 키패드 누르기 (배열 노가다 + 지향할 풀이) (0) | 2021.06.25 |
[C++] 프로그래머스 - 징검다리 건너기 (0) | 2021.06.24 |
[C++] 프로그래머스 - K번째 수 (벡터 공부) (0) | 2021.06.21 |