티스토리 뷰
대충 이런 문젠데
일단 배열 원소끼리 다 더하고
중복되는 값을 없애고
오름차순 정렬해주면되겠다 생각했다
관건은 중복되는 값 없애기 였다
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> sum;
vector<int> answer;
for(int i=0; i<numbers.size()-1; i++){
for(int j=i+1; j<numbers.size(); j++){
sum.push_back(numbers[i]+numbers[j]);
}
}
sort(sum.begin(),sum.end()); //sum 오름차순 정렬
int ansidx=0;
answer.push_back(sum[0]);
for(int i=1; i<sum.size(); i++){
if(answer[ansidx]!=sum[i]){ //중복되는 값이 아니면
answer.push_back(sum[i]); //값 삽입 후
ansidx++; //ansidx증가
}
}
return answer;
}
나의 코드다
일단 원소끼리 더한걸 sum이란 벡터에 다 넣어주고
sum을 오름차순 정렬해준다
그 후에
answer에 sum의 최솟값을 집어넣고
sum의 원소를 반복문 돌면서
현재 answer에 들어가 있는 값과 중복되지 않는 값만 넣어주도록 짰다
원래 다 넣고 erase로 지워주려다가
값이 2개 중복되면 상관없는데
3개 중복되면 안 없어지는 현상이 발생해서
그냥 오름차순으로 정렬해서 넣어줄때 값이 이미 들어가있는지 체크해주는 방식으로 짰다
근데 다 풀고 다른 사람들 풀이를 보니까
#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++){
answer.push_back(numbers[i]+numbers[j]);
}
}
sort(answer.begin(), answer.end());
answer.erase(unique(answer.begin(), answer.end()), answer.end());
return answer;
}
ㅓsort -> unique -> erase를 하면 중복제거가 간편하게 된다
원리를 보면
unique를 쓰려면 sort가 되어있는 상태여야한다
그 이유는 unique는 연속된 중복값을 vector의 제일 뒷부분으로 쓰레기 값으로 보내버리기 때문이다
그래서 sort 후에 unique(answer.begin(),answer.end())를 하면
unique가 끝나고 반환되는 값은 vector의 쓰레기 값의 첫번째 위치가 된다(중복되는 값들의 위치)
예를 들면
1 1 1 2 2 3에다가
unique를 하면 1 2 3 (쓰레기 값 쓰레기 값 쓰레기 값 쓰레기값)
이렇게 되는데
unique후에 반환되는 값이 쓰레기 값의 첫번째 원소이므로
거기서부터 마지막까지 지워버리면 된다
sort(answer.begin(),answer.end());
answer.erase(unique(answer.begin(),answer.end()),answer.end());
그래서 이런 문법이 나오는것 같다
아직은 생소하지만
중복 제거는 unique로 하는게 편하다는 것을 알게됐으니
생각나면 활용해야겠다
근데 내가 짠것도 괜찮은 코드같은데ㅋㅋㅋ
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 실패율 c++ (0) | 2022.07.04 |
---|---|
프로그래머스 소수찾기 (0) | 2022.05.31 |
프로그래머스 해시 전화번호목록 (0) | 2022.03.12 |
- Total
- Today
- Yesterday
- git 예전 커밋 수정
- git
- 클로아
- oauth
- 프로그래머스
- CSS
- 로스트아크 캐릭터
- infcon 2024
- 리눅스
- 2024인프콘
- SpringBoot
- 인프콘2024
- 데이터 3법
- authorization_code
- 우분투
- oauth2.0
- DML
- 데이터3법
- bfs
- 데이터베이스
- authorization code
- javascript
- DDL
- git commit 수정
- html
- 오픈소스
- SQL
- html #웹 #웹사이트 #플레이리스트
- kloa
- Android Studio
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |