프로그래밍/프로그래머스

Lv1_[두 개 뽑아서 더하기, C++] 풀이 및 알고리즘 정리 - 프로그래머스

워킹독 2023. 1. 3. 22:40
728x90

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 내용, 조건, 예시는 프로그래머스 사이트 참조


알고리즘

풀이 방식의 핵심은 두 개의 수를 뽑는 것!

 

그러면 떠오르는 방법은 두가지

  1. 배열 s의 n개의 원소 중에서 r개의 원소를 택하는 방법 (조합을 구하는 방법)
  2. 반복문을 이용해서 모든 조합 뽑기

여기서는 두 개의 수만 뽑으면 되기 때문에 조합(next_permutation, prev_permutation)을 사용해도 되지만 이중 반복문을 이용해서 조합을 뽑았다( 뽑아야하는 개수가 커지면 반복문 보다는 조합(next_permutation, prev_permutation)을 사용하는 것이 유리함)

 

두 개의 수를 뽑아서 더했을 때 중복된 값을 존재할 수 있으므로 저장되는 자료구조는 set을 사용해서 중복을 없애는 방법을 사용오름차순으로 정렬을 해야하기 때문에 "set<int>" or "set<int, less<int>>" 로 선언 (set 기본이 오름차순이기 때문에 less<int>는 생략해도 됨)

그리고 set을 vector로 저장해주면서 리턴해주면 완료!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <set>
 
using namespace std;
 
vector<int> solution(vector<int> numbers)
{
    set<int, less<int>> s;
    
    for (int i = 0; i < numbers.size() - 1; i++) {
        for (int k = i + 1; k < numbers.size(); k++) {
            int sum = numbers[i] + numbers[k];
            s.insert(sum);
        }
    }
 
    return vector<int>(s.begin(), s.end());
}
cs

결과 시간

↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓

 

 

728x90
반응형