문제
정답 코드
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
void s_toi(string s,vector <string> &arr)
{
char ar[100];
int aridx=0;
int size = s.size();
long long ret =0;
int flag = 0;
for (int i=0;i <size;i++)
{
if ('0'<=s[i] && s[i] <='9')
{
flag =1;
if (aridx == 0 && i != size - 1 && s[i] == '0' )
{
continue;
}
ar[aridx] = s[i];
aridx++;
if (i == size -1)
{
if (flag == 1 && aridx == 0)
{
ar[aridx] ='0';
aridx ++;
}
ar[aridx] = '\0';
arr.push_back(ar);
}
}
else if (flag == 1)
{
if (flag == 1 && aridx == 0)
{
ar[aridx] ='0';
aridx ++;
}
ar[aridx] = '\0';
arr.push_back(ar);
aridx = 0;
flag =0;
}
}
}
int cmp(string a1, string a2)
{
if (a1.size() > a2.size())
return (0);
else if (a1.size() < a2.size())
return (1);
for (int i=0; i < a1.size();i++)
{
if (a1[i] != a2[i])
{
return(a1[i] < a2[i]);
}
}
return (1);
}
int main()
{
ios:: sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector <string> arr;
for (int i=0;i < n; i++)
{
string s;
cin >> s;
s_toi(s,arr);
}
sort (arr.begin(),arr.end(),cmp);
for (auto it : arr)
{
cout << it << "\n";
}
}
문제 풀이의 흐름
- 입력
- 문자를 숫자만 파싱받아서 vector에 넣어주고
- 그걸 정렬하는데
- 정렬 비교 함수를 직접 만들어서 사용
- 끝
주의 할 점
- 이 문제는 쉽게 보면 쉬운데 문자열로 접근을 해야한다 왜냐면 엄청나게 큰 수가 오기때문이다.
- 문자열 비교는 살짝 더럽지만 최대한 깔끔하게 하려고 했다.
반성 및 고찰
틀린코드
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
void s_toi(string s,vector <long long> &arr)
{
int size = s.size();
long long ret =0;
int flag = 0;
for (int i=0;i <size;i++)
{
if ('0'<=s[i] && s[i] <='9')
{
flag =1;
ret = ret *10 + s[i] -'0';
if (i == size -1)
arr.push_back(ret);
}
else if (flag == 1)
{
arr.push_back(ret);
ret = 0;
flag =0;
}
}
}
int main()
{
// ios:: sync_with_stdio(0);
// cin.tie(0);
int n;
cin >> n;
vector <long long> arr;
for (int i=0;i < n; i++)
{
string s;
cin >> s;
s_toi(s,arr);
}
sort (arr.begin(),arr.end());
for (auto it : arr)
{
cout << it << "\n";
}
}
이 문제는 숫자가 엄청나게 크게 들어오는 케이스가 존재한다.
Uploaded by N2T
728x90
'알고리즘 > 백준-실버' 카테고리의 다른 글
백준 3474번 교수가 된 현우(C++) (0) | 2023.01.07 |
---|---|
백준 10709번 기상캐스터(C++) (0) | 2023.01.06 |
백준 4559번 비밀번호 발음하기(C++) (0) | 2023.01.06 |
백준 2910번 빈도정렬 (C++)(stable, unordered_map, find와 find_if,람다식,stable_sort) (0) | 2023.01.05 |
백준 2828번 사과 담기 게임(C++) (0) | 2023.01.05 |