728x90
https://softeer.ai/practice/11001#pop_user
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
문자열
정수 혹은 실수로 구성된 배열이 주어질 때, 이를 오름차순으로 정리해서 출력하는 문제인데
정렬 기준이 소숫점 뒤 숫자를 정수로 생각하고 비교해야한다는 것이 특이한 점이다.
소수점을 기준으로 왼쪽 수를 기준으로 우선 정렬한 뒤, 오른쪽 수를 기준으로 정렬해야함 + 소수점이 없는 경우는 값이 같더라도 있는 쪽이 더 큰 값 (ex. 3 < 3.0) ..;
접근방법
처음에는 int로 받아서 소수점 뒤의 수를 10을 곱해서 정수로 만들어서 따로 비교하는 방법도 시도해 봤는데, 컴파일이 안되거나 실행이 안됐고
string split 사용해서 string을 커스텀해서 (소수점 기준으로 split해서 양쪽의 수를 stoi한 다음 비교하는 것) 정렬하는 걸로 했을 때는 테스트케이스는 제대로 돌아갔는데, 제출하면 런타임에러가 몇개 떴었다.
그래서 다른 블로그 글 참고해서 pair의 배열로 커스텀 정렬을 쓰지 않고 <정수 부분, 소수점 뒤의 숫자의 정수화된 부분> 이렇게 해서 정렬하니 통과됐다. (소수점 뒤의 수가 없는 경우에는 -1를 담는다)
getline으로 split하는 건 계속 사용했다
소스코드
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv)
{
int N;
cin >> N;
vector<pair<int,int>> arr;
for(int i = 0 ; i < N ; i++){
string s;
cin >> s;
string token;
istringstream iss(s);
vector<string> v;
while(getline(iss, token, '.')){
v.push_back(token);
}
if(v.size() > 1){
arr.push_back({stoi(v[0]), stoi(v[1])});
}else{
arr.push_back({stoi(v[0]), -1});
}
}
sort(arr.begin(), arr.end());
for(int i = 0 ; i < N ; i++){
if(arr[i].second == -1){
cout << arr[i].first << "\n";
} else {
cout << arr[i].first << "." << arr[i].second << "\n";
}
}
return 0;
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[Softeer] Yeah, but How? (Swift) (0) | 2025.02.04 |
---|---|
[Softeer] 개표 (Swift) (0) | 2025.02.04 |
[프로그래머스] 방의 개수 (Swift) (0) | 2025.02.03 |
[프로그래머스] 퍼즐 조각 채우기 (Swift) (0) | 2025.01.16 |
[프로그래머스] 아이템 줍기 (C++) (0) | 2025.01.14 |