본문 바로가기
Coding Test/Programmers

[Programmers] (2018 KAKAO BLIND RECRUITMENT) Lv 2. [3차] 파일명 정렬

by song.ift 2023. 7. 15.

https://school.programmers.co.kr/learn/courses/30/lessons/17686

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

enum EType { HEAD, NUMBER, END };

vector<string> conversion(const string& file)
{
    vector<string> v{ END, "" }; //  HEAD, NUMBER 만 사용
    for (size_t i = 0; i < file.length(); ++i)
    {
        if (isdigit(file[i]))
        {
            v[NUMBER] += file[i];
            continue;
        }

        if (!v[NUMBER].empty()) break; // NUMBER 칸에 문자가 있다는 것은 file이 NUMBER 구간을 넘어서서 TAIL에 들어섰다는 것
        else v[HEAD] += tolower(file[i]);
    }

    return v;
}

vector<string> solution(vector<string> files) {
    const auto& condition = [](const auto& f1, const auto& f2) {
        const auto& a = conversion(f1);
        const auto& b = conversion(f2);
        return (a[HEAD] != b[HEAD]) ? a[HEAD] < b[HEAD] : stoi(a[NUMBER]) < stoi(b[NUMBER]);
    };
    stable_sort(files.begin(), files.end(), condition); // 기존 순서를 보장하지 않는 sort() 대신 기존 순서를 보장하는 것 사용
    
    return files;
}

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/commit/6be794bd0b7d9b74d35a55c6030f2d70bb7ef22d

 

[level 2] Title: [3차] 파일명 정렬, Time: 1.50 ms, Memory: 4.09 MB -Baekjoo… · developeSHG/Algorithm-Baekjoon_Programme

…nHub

github.com

 

댓글