-
[프로그래머스] 파일명정렬문제 풀이 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