백준 문제풀이
[백준][문자열] 2870 수학숙제 c++구현
꽁이꽁설꽁돌
2024. 5. 7. 10:59
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";
}
반응형