< 프로그래머스 C++ > 두 개 뽑아서 더하기
2026. 4. 24. 09:41ㆍProgrammers

문제 해석
서로 다른 두 인덱스의 원소를 모두 조합해서 합을 구한다.
1. 모든 쌍을 중복 없이 선택
2. 결과에서 중복 값 제거
3. 최종적으로 오름차순 정렬
서로 다른 인덱스이기 때문에 같은 위치를 두 번 찾는 것은 안되지만 numbers에 같은 값이 두 번 나오면 그 둘은 다른 인덱스이므로 조합이 가능하다.
필요한 도구
- 이중 반복문
- find 함수
- sort 함수

핵심 포인트
1. 중복 없는 쌍 생성
for(int i = 0; i < numbers.size() - 1; ++i)
{
for(int j = i + 1; j < numbers.size(); ++j)
바깥 반복문 i는 마지막에서 하나 전까지, 안쪽 반복문 j는 i 다음부터 끝까지 반복된다.
이렇게 하면 i, j쌍이 (0, 1) (0, 2) (1, 2) 이런식으로 생기고, (1,0) (2,0)처럼 순서만 바뀐 중복 조합은 생기지 않는다.
numbers 크기가 N일 때 총 조합 개수는 N*(N-1) / 2 이다.
2. find 함수로 중복 값 검사
if(find(answer.begin(), answer.end(), a) == answer.end())
find는 컨테이너에서 특정 값을 찾는다.
값을 찾으면 해당 위치의 iterator를 반환하지만, 값을 찾지 못하면 end()를 반환하기 때문에
조건문에서 .end()와 비교하는 관용구를 사용한다.
3. 마지막 정렬
sort(answer.begin(), answer.end());
입력을 정렬했어도 마지막에 입력되는 숫자들은 정렬되지 않을 수 있다.
그래서 마지막에 정렬하는 코드를 추가해주어야 한다.
트러블 슈팅
결과 정렬이 안됨
문제가 없다고 생각했던 코드에서 오류가 나서 확인해보니 결과값도 오름차순으로 정렬하는 부분이 있었다.
그래서 마지막에 정렬하는 코드를 추가해주니 문제없이 결과를 해결할 수 있었다.
'Programmers' 카테고리의 다른 글
| < 프로그래머스 C++ > 푸드 파이트 대회 (0) | 2026.04.28 |
|---|---|
| < 프로그래머스 C++ > 가장 가까운 같은 글자 (0) | 2026.04.27 |
| < 프로그래머스 C++ > K번째 수 (0) | 2026.04.23 |
| < 프로그래머스 C++ > 문자열 내 마음대로 정렬하기 (0) | 2026.04.22 |
| <프로그래머스 C++> 숫자 문자열과 영단어 (1) | 2026.04.21 |