본문 바로가기
프로그래머스/C++

[level 1] 문자열 내 마음대로 정렬하기

by AsCE_hyunseung 2018. 8. 30.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <string>
#include <vector>
 
using namespace std;
 
vector<string> solution(vector<string> strings, int n) {
 
    for (int i = 0; i < strings.size(); i++)//버블정렬 코드
    {
        for (int j = i+1; j <= strings.size()-1; j++)
        {
            if (strings[i][n]>strings[j][n])//문제의 메인 조건(오름차순 정렬)
            {
                strings[i].swap(strings[j]);
            }
            else if (strings[i][n] == strings[j][n] && strings[i]>strings[j])//인덱스 문자가 같을 사전순으로 정렬
            {
                strings[i].swap(strings[j]);
            }
 
        }
    }
    return strings;
}
cs


문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.


제한 조건

strings는 길이 1 이상, 50이하인 배열입니다.

strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

모든 strings의 원소의 길이는 n보다 큽니다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.


정렬은 간단하게 구현 가능한 버블 정렬을 썼다. 만약 이 문제가 효율성까지 채점을 했다면 다른 정렬법을 썼을 것이다. 

버블 정렬의 시간 복잡도는 (2중 for문)이기 때문에 n이 커지면 커질수록 급격하게 반복 횟수가 많아지기 때문이다.


if문에서는 인덱스 문자대로 비교해서 오름차순 정리를 해주었고 else if문에서는 인덱스 문자가 같을 때 사전 순으로 정렬해주었다.


+ 엘티 갔다 오느라 이틀 정도 쉬었는데 역시 쉬고 나서 다시 시작하려니 뭔가 마음이 싱숭생숭했다. 꾸준함의 중요성을 이렇게 또 깨닫는다.