반응형
<문제 소개>
<소스 코드>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> num_list)
{
vector<int> answer;
for(int i = 0; i < 5; i++)
{
int curMin = num_list[i];
int minIndex = i;
// 선택 정렬
for(int j = i; j < num_list.size(); j++)
{
if(curMin > num_list[j])
{
curMin = num_list[j];
minIndex = j;
}
}
answer.push_back(curMin);
swap(num_list[i], num_list[minIndex]);
}
return answer;
}
<풀이과정>
1. 가장 작은 5개의 수를 구해야 하므로 5번을 반복한다.
2. 현재 가장 작은 수 curMin은 num_list의 i번째 원소로 초기화시키고, 이 때의 인덱스는 i이므로 가장 작은 수의 인덱스 번호를 나타낼 minIndex를 i로 초기화시킨다.
3. 다시 한 번 반복문을 진행하는 데 num_list의 원소들을 i번째부터 끝까지 탐색한다.
4. 탐색 중 만약 현재 가장 작은 수 curMin보다 작은 수가 나온다면 해당 수를 curMin으로 바꾸고, minIndex도 j로 업데이트 시켜준다.
5. 위의 반복이 끝난 뒤, answer에 현재 가장 작은수 curMin을 넣어주고, swap을 이용해 현재 가장 작은 수를 num_list의 i번째의 수와 위치를 바꾸어준다.
6. 이를 앞서 말한것처럼 5번을 반복해주면 num_list는 앞부터 차례대로 5번 정렬되고, answer에는 낮은 수부터 차례대로 5개의 수들이 나열된다.
<코멘트>
선택정렬을 사용해서 문제를 풀었다!
(사실 풀어놓고 무슨 정렬인지 헷갈려서 찾아봤다.ㅋㅋ)
<제출결과>