본문 바로가기
코딩테스트 준비/프로그래머스

[프로그래머스][C++] 뒤에서 5등까지

by 스테디코디스트 2023. 10. 17.
반응형

<문제 소개>


<소스 코드>

#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개의 수들이 나열된다.

 

<코멘트>

선택정렬을 사용해서 문제를 풀었다!

(사실 풀어놓고 무슨 정렬인지 헷갈려서 찾아봤다.ㅋㅋ)


<제출결과>