ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 파일명정렬
    문제 풀이 2020. 6. 4. 16:53

    풀이)

    파일에 관한 정보를 저장하는 구조체를 하나 선언하여 푼 문제이다.


    만든 구조체는 이러하다.

    struct F_info{

    string head, tail; //head명과 tail명을 저장하는 변수

    int number; // number을 저장하는 변수

    int index; // 파일이 입력된 순서 = 파일인덱스를 저장하는 변수

    }


    풀이과정을 간단히 말해보자면

    1. 파일을 head, number, tail 로 나눈 정보를 구조체로 만들고, 구조체 배열에 저장한다.

    2. 구조체 배열을 sort 함수를 통해 정렬한다.

        (head부분먼저확인 -> number확인 ->입력순서확인)

    3. 정렬된 구조체의 첫번째부터 마지막까지 구조체의 파일인덱스를 확인해 answer에 그 순으로 삽입해준다.


    *head는 대소문자를 구별하지 않으므로, 구조체에 head에 관한 정보를 넣을때 다 대문자로 바꿔서 넣어줬다.

     number은 "011", "11"이 있으면 어차피 둘 다 11이기때문에 int형으로 바꿔서 넣어줬다.*


    코드)

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

    bool isNumber(char ch){ // 숫자임을 확인해주는 함수 if(ch >= '0' && ch <= '9')return true; else return false; } string change(string s){//대문자로 바꿔주는 합수 for(int i=0;i<s.length();i++){ if(s[i] >= 97 && s[i] <= 123) s[i] -= 32; } return s; } struct F_info{ string head, tail; int number; int index; // 입력순서 F_info(string head, int number,string tail,int index){ this->head =head; this->number = number; this->tail = tail; this->index = index; } }; bool cmp(const F_info &a,const F_info &b){ if(a.head == b.head){ if(a.number == b.number) return a.index < b.index; else return a.number < b.number; } return a.head < b.head; } vector<string> solution(vector<string> files) { vector<string> answer; vector<F_info> File; for(int i=0;i<files.size();i++){ int j=0, idx = 0; string info[3] = {"","",""};//head,number,tail 임시저장공간 while(j < files[i].length()){ if(isNumber(files[i][j])){ //number idx++; for(int t=0;t<5 && j < files[i].length();t++){ // 숫자는 5자리까지만 가능 if(!isNumber(files[i][j])) break; info[idx] += files[i][j]; j++; } //tail info[idx+1] = files[i].substr(j); break; } info[idx] += files[i][j]; j++; } File.push_back(F_info({change(info[0]),stoi(info[1]),info[2],i})); } sort(File.begin(),File.end(),cmp); for(int i=0;i<File.size();i++){ answer.push_back(files[File[i].index]); } return answer; }


    '문제 풀이' 카테고리의 다른 글

    [프로그래머스] 선입 선출 스케줄링  (0) 2020.06.05
    [프로그래머스] 지형이동  (0) 2020.06.05
    [프로그래머스] 방금그곡  (0) 2020.06.04
    [프로그래머스] 오픈채팅방  (0) 2020.06.03
    [프로그래머스] 캐시  (0) 2020.06.03

    댓글

Designed by Tistory.