백준 알고리즘(C++)

백준 2870번 수학숙제 ( C++ )

coding232624 2024. 3. 18. 22:46

문제

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

 

2870번: 수학숙제

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차

www.acmicpc.net

 

해설

동적할당 -> vector사용

커스텀 정렬

string 크기 비교(길이가 다르면 정렬 제대로 X)

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
  #include <bits/stdc++.h>
using namespace std;
 
int n;
string line;
string tmp;
bool check;
vector<string> ret;
 
bool cmp(string a, string b)
{
  if (a.size() == b.size())
    return b > a;
  return a.size() < b.size()
}
 
int main()
{
  cin >> n;
 
  for (int i = 0; i < n; i++)
  {
    cin >> line;
    check = false;
    for (char a : line)
    {
      tmp = a;
      if (a >= '0' && a <= '9' && check == false)
      {
        ret.push_back(tmp);
        check = true;
      }
      else if (a >= '0' && a <= '9' && check == true)
      {
        tmp = ret.back();
        if (tmp == "0")
          tmp = a;
        else
          tmp += a;
        ret.back() = tmp;
      }
      else
        check = false;
    }
  }
  sort(ret.begin(), ret.end(), cmp);
  for (auto a : ret)
  {
    cout << a << "\n";
  }
}
 
 
cs