[3차] 파일명 정렬

링크: [3차]-파일명-정렬

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

 

각 파일명을 받으며 헤더와 넘버를 구분하여 따로 저장한다.
그 후 주어진 정렬 순서대로 정렬을 수행 후 그 값들을 출력한다.

 

  • 정답 코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<pair<int, pair<string, int>>> list;

bool comp(pair<int, pair<string, int>> &a, pair<int, pair<string, int>> &b){
    if(a.second.first == b.second.first){
        if(a.second.second == b.second.second)
            return a.first < b.first;
        return a.second.second < b.second.second;
    }
    return a.second.first < b.second.first;
}

bool isNumber(char c){
    if(c >= '0'&& c <= '9') return true;
    else return false;
}

vector<string> solution(vector<string> files) {
    vector<string> answer;
    int size = files.size();

    for(int i = 0; i< size; i++){
        string str = files[i];
        string head = "";
        string number = "";
        int idx = 0;
        for(; idx < str.size(); idx++){
            if(isNumber(str[idx])) break;
            head.push_back(str[idx]);
        }

        for(; idx < str.size(); idx++){
            if(isNumber(str[idx])) number.push_back(str[idx]);
            else break;
        }
        transform(head.begin(), head.end(), head.begin(), ::tolower);

        while(number[0] == '0')
            number.erase(0,1);
        list.push_back({i, {head, atoi(number.c_str())}});

    }
    sort(list.begin(),list.end(), comp);

    for(int i = 0; i< size; i++)
        answer.push_back(files[list[i].first]);
    return answer;
}

'ProblemSolving' 카테고리의 다른 글

[프로그래머스] 거리두기 확인하기  (0) 2022.05.22
[BOJ] 2470 두 용액  (0) 2022.05.21
[BOJ] 4375 1  (0) 2022.05.19
[BOJ] 2193 이친수  (0) 2022.05.18
[BOJ] 1245_농장 관리  (0) 2022.05.15
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기