Coding Problem/프로그래머스

[프로그래머스/Lv1] - 문자열 내 마음대로 정렬하기

마탁이 2021. 4. 29. 22:29

programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

  • 간단히 char 를 int로 생각하여 비교하면 될 문제지만
  • 만약 같다면 사전순으로 정리하는 문제이다.
  • 사전순으로 정리하는 것에서 조건을 정확히하면 쉽게 풀 수 있다.

더보기
#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;

    for (int lhs = 0; lhs < strings.size(); lhs++)
    {
        for (int rhs = lhs+1; rhs < strings.size(); rhs++)
        {
            if (lhs == rhs)
                continue;

            const int lhsCh = strings[lhs][n];
            const int rhsCh = strings[rhs][n];

            if (lhsCh > rhsCh)
            {
                string temp = strings[lhs];
                strings[lhs] = strings[rhs];
                strings[rhs] = temp;
            }
            else if (lhsCh == rhsCh)
            {
                const int size = strings[lhs].size() > strings[rhs].size()
                    ? strings[lhs].size() : strings[rhs].size();
                for (int idx = 0; idx < size; idx++)
                {
                    if (strings[lhs][idx] > strings[rhs][idx])
                    {
                        string temp = strings[lhs];
                        strings[lhs] = strings[rhs];
                        strings[rhs] = temp;
                        break;
                    }
                    else if (strings[lhs][idx] == strings[rhs][idx])
                        continue;
                    else
                        break;
                }
            }
        }
    }

    answer = strings;

    return answer;
}

int main()
{
    vector<string> strings = { "aen", "bed", "car" };
    int n = 1;
    vector<string> answer = solution(strings, n);

    for (string ans : answer)
    {
        std::cout << ans << std::endl;
    }

    return 0;
}