파일명 정렬

108번뇌·2021년 9월 26일
0

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

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

typedef struct CON
{
	string Head;
	string Head1;
	string Number;
	int iNumber;
	string Tail;
	int order;
};

bool cmp(CON a, CON b)
{
	if (a.Head1 == b.Head1)
	{
		if (a.iNumber == b.iNumber)
		{
			return a.order < b.order;
		}
		else
		{
			return a.iNumber < b.iNumber;
		}
	}
	else
	{
		return a.Head1 < b.Head1;
	}
}

vector<string> solution(vector<string> files) {
	vector<string> answer;
	vector<CON> vTemp;
	for (int i = 0; i < files.size(); i++)
	{
		int flag(0);
		int istop(0);
		int numstart(0);//숫자시작하는부분
		int numend(0);//숫자 끝나는부분
		for (int j = 0; j < files[i].size(); j++)
		{
			if (files[i][j] >= '0' && files[i][j] <= '9' && flag == 0)
			{
				flag = 1;
				numstart = j;//숫자 시작하는 부분

			}
			if (files[i][j] >= '0' && files[i][j] <= '9' && flag == 1 && (files[i][j + 1]<'0' || files[i][j + 1]>'9') && istop == 0)
			{
				numend = j;
				istop = 1;
			}

			if (j == files[i].size() - 1)
			{
				CON conTemp;
				conTemp.Head = files[i].substr(0,numstart);//숫자 처음 시작하는곳 전까지 짜른다.
				string sTemp = conTemp.Head;
				for (int j = 0; j < sTemp.size(); j++)
				{
					sTemp[j] = tolower(sTemp[j]);
				}
				conTemp.Head1 = sTemp;
				conTemp.Number = files[i].substr(numstart, numend - numstart+1);
				conTemp.iNumber = stoi(conTemp.Number);
				conTemp.Tail = files[i].substr(numend+1);
				conTemp.order = i;
				vTemp.push_back(conTemp);
			}
		}
	}

	sort(vTemp.begin(), vTemp.end(), cmp);

	for (int i = 0; i < vTemp.size(); i++)
	{
		string sTemp = vTemp[i].Head + vTemp[i].Number + vTemp[i].Tail;
		answer.push_back(sTemp);
	}


	return answer;
}

구조체 정렬 + 문자열 짜르기 좋은 예시였음.
1] string 할때,
string(0,x) : 0~x-1인덱스까지 짜름.
string(x) : x에서 끝까지 문자열 다자름.
stoi("011") : 11이 됨

2] 이 문제에서 고려해야 한건.
우선순위를 고려하고(들어온 순서대로 그대로 정렬) 숫자또한 0을 제외하고 정렬해야함.

typedef struct CON
{
	string Head;
	string Head1;
	string Number;
	int iNumber;
	string Tail;
	int order;
};

그래서 다음과 같은 string Head1과 int iNum까지 추가로 넣은다음
최종적으로 구조체중에서 필요한 정보만 합쳤다.

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN