숨막히는 알고말고/문제 풀이
[Programmers] 두 개 뽑아서 더하기
숨숨숨
2020. 12. 1. 17:57
👀 문제 설명
정수 배열 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] |
✍🏻풀이
이중 for문을 사용한다.
i는 0~numbers.size() - 2까지 접근,
j는 i + 1 ~ numbers.size() - 1까지 접근한다.
두 값을 더한 값을 sum에 저장하고, answer 벡터에 sum 값이 있는지 확인한다. (find 함수 사용)
있을 경우, continue를 사용해 벡터에 넣지 않고 다음으로 넘기고
없을 경우, sum을 answer 벡터에 넣어준다.
마지막으로 answer 벡터를 오름차순으로 정렬한다.
vector에서 특정 값이 있는지 확인하는 함수 : find
코드
//
// Programmers_68644.cpp
// Algorithm
//
// Created by 조수민 on 2020/12/01.
// Copyright © 2020 조수민. All rights reserved.
//
// 두 개 뽑아서 더하기(https://programmers.co.kr/learn/courses/30/lessons/68644)
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
for (int i = 0; i < numbers.size() - 1; i++) {
for (int j = i + 1; j < numbers.size(); j++) {
int a = numbers.at(i);
int b = numbers.at(j);
int sum = a + b;
if (find(answer.begin(), answer.end(), sum) != answer.end())
continue;
answer.push_back(sum);
}
}
sort(answer.begin(), answer.end());
return answer;
}
int main() {
vector<int> ans1 = solution({2, 1, 3, 4, 1});
cout << "====== ans1 ======" << endl;
for (int i = 0; i < ans1.size(); i++) {
cout << ans1.at(i) << " ";
}
cout << endl;
vector<int> ans2 = solution({5, 0, 2, 7});
cout << "====== ans2 ======" << endl;
for (int i = 0; i < ans2.size(); i++) {
cout << ans2.at(i) << " ";
}
cout << endl;
return 0;
}