프로그래머스 : 파일명 정렬(C++)

Chanyang Im·2022년 5월 23일
0

프로그래머스

목록 보기
3/6
post-thumbnail

문제

풀이

fileName이라는 구조체를 만들어서 정렬을 했습니다.
구조체에는 order, head, number라는 변수가 있습니다.
order는 파일의 순서를 저장하는 용도입니다.
head는 파일의 헤드를 저장하는데 소문자로 만들어서 저장합니다.
number는 파일의 number를 저장하는 용도입니다.

이렇게 각 파일을 구조체에 담은 다음 seFileName이라는 함수를 만들어서 vector에 넣어줍니다.
sort함수를 이용해서 조건에 맞게 정렬합니다.
order를 이용해서 answer에 넣어줍니다.

코드

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct fileName{
  int order;
  string head;
  int number;
};

vector<fileName> f;

void setFileName(int o, string h, int n) {
    fileName fileName_;
    fileName_.order = o;
    fileName_.head = h;
    fileName_.number = n;
    
    f.push_back(fileName_);
}

bool compare(const fileName& f1, const fileName& f2) {
    if (f1.head == f2.head) {
        if (f1.number == f2.number) {
            return f1.order < f2.order;
        }
        else {
            return f1.number < f2.number;
        }
    }
    else {
        return f1.head < f2.head;
    }
}

bool isNumber(char c) {
    if('0'<= c && c <= '9') {
        return 1;
    }
    return 0;
}

vector<string> solution(vector<string> files) {
    vector<string> answer;
    
    int size = files.size();
    for(int i = 0; i < size; i++) {
        string file = files[i];
        string head = "";
        string number = "";

        int index = 0;
        for(int j = 0; j < file.length(); j++) {       
            if(!isNumber(file[j])) {
                head.push_back(tolower(file[j]));
            }
            else {
                index = j;
                break;
            }
        }
        for(int k = index; k < file.length(); k++) {
            if(isNumber(file[k])) {
                number.push_back(file[k]);
            }
            else {
                break;
            }
        }
        setFileName(i, head, stoi(number));
    }
    sort(f.begin(), f.end(), compare);
    
    for (int i = 0; i < f.size(); i++) {
    answer.push_back(files[f[i].order]);
    }
    
    return answer;
}
profile
안녕하세요!! 세상에 관심이 많은 공학자입니다!😆

0개의 댓글