본문 바로가기
백준 문제풀이

[백준][문자열] 2870 수학숙제 c++구현

by 꽁이꽁설꽁돌 2024. 5. 7.
728x90
반응형

목차

    https://www.acmicpc.net/problem/2870

    문제

     

    문제 구현방향

    문자열이 100글자까지 되어 모든 수가 숫자이면 int형 범위를 초과하게 된다

    따라서 문자열을 따로 저장해 문자열 정렬 기준을 직접 만들어 풀어 주어야 한다.

     

     

     

    참고

    https://be-senior-developer.tistory.com/9

     

    c++ 입출력 정리와 자주 쓰이는 vector

    목차 나는 백준 문제 풀이를 하면서 배열 대신 자주 쓰이는 vector와 c++의 입출력을 깔끔하게 정리하고 싶었다. 아래 내용 정도만 안다면 큰 도움이 될 것이라 생각한다. 입출력 향상 방법 #include u

    be-senior-developer.tistory.com

     

     

    코드 구현

    #include <iostream>
    #include<vector>
    #include<map>
    #include<queue>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    vector<string> v;
    
    bool compare(string a, string b) {  //문자열 정렬 기준
    	if (a.size() == b.size())
    		return a < b;
    	else
    		return a.size() < b.size();
    }
    
    string zero(string str) {
    	string num = "";
    	int flag = 0;  //0저장해도 되는지 flag
    	for (int i = 0; i < str.size(); i++) {
    		if (str[i] != '0') {
    			num += str[i];
    			flag = 1;
    		}
    		else if (flag && str[i] == '0')
    			num += '0';
    	}
    	if (num == "")  //모든 수가 0이므로 0 반환
    		return "0";
    	else
    		return num;
    }
    
    int main() {
    
    	int T;
    	string str, num="";
    	cin >> T;
    	for (int i = 0; i < T; i++) {
    		cin >> str;
    		
    		num = "";
    		for (int j = 0; j < str.size(); j++) {
    			if (str[j] >= '0' && str[j] <= '9')  //일단 모든 숫자를 다 저장해 준다
    				num += str[j];
    			else {
    				if(num!="")
    				    v.push_back(zero(num));
    				num = "";
    			}
    		}
    		if(num!="")  //남은 문자열도 확인해 준다
    			v.push_back(zero(num));
    
    	}
    	sort(v.begin(), v.end(), compare);  //새로운 정렬 기준을 바탕으로 정렬
    	for (auto k : v)
    		cout << k<<"\n";
    }

     

    반응형