일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구슬탈출
- TDD란?
- RBT
- 풀이
- 9996
- stl
- LOLIN D32
- 페이지교체알고리즘
- 데이터 링크 계층
- 13459
- 3XN 타일링
- 구현
- mediastream
- tfjs
- 자료구조
- c++
- REACT
- TDD
- OpenVidu
- 1796
- Vite 사용 이유
- 메모리계층
- 2623
- 적두트리
- 테스트주도개발
- 백준 2133
- WebRTC란
- dp
- 백준
- ESP32
- Today
- Total
그냥 블로그
[ 백준 / C++ ] 1181 단어 정렬 + sort() 본문
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
1. sort 설명
2. 정답 코드 << 바로 정답 보고 싶으신 분은 정답 코드 클릭
아직 C++ 언어가 어색해서 걱정인데,
그 중 알고리즘에서 가장 중요한 sort()에 대해 한 번 알아보려 한다.
이걸 몰라서 신한 코테에서 개고생을 했었다..;
sort는 algorithm STL에서 제공하고 있다.
#include < algorithm>
하지만 저는 bits/stdc++.h를 사용합니다 개편한~
1. sort algorithm
sort(start, end, compare)로 되어 있다. 이 때, start와 end에는 주소값이 와야 한다.
compare를 넣지 않을 경우 오름차순 정렬이 되고, 내림 차순 정렬의 경우 compare 위치에 greater<자료형>()을 넣어준다.
sort는 quick sort 기반으로 함수가 구현되어 있어 평균 시간 복잡도는 n log n이다.
[start, end)로 end는 포함되지 않는다.
2. 배열에서의 사용
#include<iostream>
#include<algorithm>
using namespace std;
void Print(int *arr){
cout << "arr[i] : " ;
for(int i=0; i<10; i++){
cout << arr[i] << " ";
}
cout << endl;
}
int main(void){
int arr[10] = {3, 7, 2, 4, 1, 0, 9, 8, 5, 6};
sort(arr, arr+10); //[arr, arr+10) default(오름차순)로 정렬
Print(arr); //정렬 후 출력
return 0;
}
// arr[i] : 0 1 2 3 4 5 6 7 8 9
3. vector에서 사용
#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
using namespace std;
void Print(vector<int> &v){
cout << "vector : " ;
for(int i=0; i<10; i++){
cout << v[i] << " ";
}
cout << endl;
}
int main(void){
srand((int)time(NULL)); //난수생성을 위해
vector<int> v;
int n = 10;
for(int i=0; i<n; i++){ //vector에 1의자리 숫자를 임의로 삽입
v.push_back(rand() % 10);
}
sort(v.begin(), v.end(), greater<int>()); //[begin, end) 내림차순으로 정렬
Print(v); //정렬 후 출력
return 0;
}
// vector : 9 8 7 6 5 4 3 2 1 0
4. compare 함수 직접 생성
compare 함수에 대한 예제는 문제의 정답에서 확인하세요
++ 추가하자면, 혹시 받는 파라미터의 자료형이 vector<> 와 같은 복잡한 구조라면
compare 함수에서 call-by-value가 아닌 call-by-reference를 사용하길 추천합니다 : )
bool compare(vector <int> &v1, vector<int> &v2 )
이렇게 말이죠 ㅎㅎ 앞에 const를 붙여준다면 변경될 걱정도 없습니다.
bool compare(cons vector<int> &v1, const vector<int> &v2)
[정답]
#include <bits/stdc++.h>
using namespace std;
int N;
vector<string> arr;
map<string, int> marr;
bool compare(string s1, string s2) {
if (s1.length() > s2.length()) {
return false;
}else if (s1.length() == s2.length() && s1 > s2) {
return false;
}
return true;
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
string s;
cin >> s;
if (marr[s] == 0) {
marr[s] += 1;
arr.push_back(s);
}
}
sort(arr.begin(), arr.end(), compare);
for (auto i : arr) cout << i << '\n';
}
'C++ > 백준' 카테고리의 다른 글
[C++/백준] 마법사 상어와 비바라기 (1) | 2023.11.12 |
---|---|
[ 백준/C++ ] 2174 로봇 시뮬레이션 (1) | 2023.10.29 |
[ 백준/C++ ] 2468 안전 영역 (0) | 2023.10.12 |
[ 백준/C++ ] 나는야 포켓몬 마스터 이다솜 (1) | 2023.10.10 |
[백준/C++] 2559 수열 (1) | 2023.10.08 |