코딩테스트

[백준] 2870번 수학숙제

yeoul0714 2025. 4. 30. 01:29
#include "bits/stdc++.h"

using namespace std;

vector<int> result;
vector<string> temp;

bool IsAlphabet(char c)
{
	return c >= 'a' && c <= 'z';
}

void StringToInt(vector<string> stringV)
{
	for (string ret : stringV)
	{
	
		result.push_back(stoi(ret));
	}
		
}

void Do(string input)
{
	string ret = "";

	bool bLastNum = true;

	for (char c : input)
	{
		if (!IsAlphabet(c))
		{			
			ret += c;
		}
		else
		{
			if (!ret.empty())
			{
				while (ret.length() > 1 && ret[0] == '0')
					ret.erase(0, 1);

				temp.push_back(ret);
			}
			

			ret = "";
		}

		
	}

	if (!ret.empty())
	{
		while (ret.length() > 1 && ret[0] == '0')
			ret.erase(0, 1);
		
		temp.push_back(ret);

	}

}

bool Cmp(string a, string b)
{
	if (a.length() != b.length())
		return a.length() < b.length();

	return a < b;
}


int main() {


	int n;

	cin >> n;

	vector<string> v;
	string line;

	for (int a = 0; a < n; a++)
	{
		cin >> line;

		Do(line);
	}


	sort(temp.begin(), temp.end(), Cmp);

	for (string fin : temp)
	{
		cout << fin << '\n';
	}
}

 

놓쳤던 부분 정리

 

1. 기존에 string vector를 전부 int vector로 변환해서 풀려고 했는데 100자리 까지 받는 문제의 특성상 int로 받는 것은 말이 되지 않는 접근법이었다. 앞으로는 문제의 조건을 정확히 파악하고 문제를 풀자

 

2. 문자열을 비교하는 Cmp함수를 작성해서 sort의 인자로 넣어서 비교하는 스킬이 필요하다. 그냥 비교하면 문자열이어서 우리가 원하는 결과가 나오지 않기 때문에 커스텀 Cmp함수가 필요하다.