출처 : https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
고려사항
- stl 들을 사용하여 쉽게 풀 수 있음.
- 문자열의 길이를 키로 map<int, set<string>> m 을 만들고,
- 문자열의 길이를 구해서 이미 m 에 있으면, 해당 set에 문자열을 넣어주고,
없으면 새로운 키와 함게 삽입해준다. - 정렬은 map, set 자료구조의 이점으로 자동으로 진행.
- 본 문제에서 for( auto : ) 을 사용하다가 알게된 사실인데,
보통 벡터나, 맵 등에서 간편하게 사용하려고 auto 를 통해 원소에 접근한다
그러나 auto 에는 값이 복사된 임시 값이 전달되는 것이라, 출력은 상관없으나
접근하여 값을 변경 하는 경우에는 *, & 등을 활용하여 접근해줘야한다.
#include <iostream>
#include <map>
#include <set>
using namespace std;
int main() {
map<int, set<string>> m;
string str;
int n, strlen;
cin>>n;
for(int i=0;i<n;++i){
cin>>str;
strlen = str.length();
if(m.find(strlen) != m.end()){
m[strlen].insert(str);
}else{
set<string> s;
s.insert(str);
m[strlen] = s;
}
}
return 0;
}
'BOJ 백준 > 기타' 카테고리의 다른 글
| 백준 01976 - 여행 가자 (0) | 2020.11.23 |
|---|---|
| 백준 02108 - 통계학 (0) | 2020.11.22 |
| 백준 02751 - 수 정렬하기 2 (0) | 2020.11.20 |
| 백준 02750 - 수 정렬하기 (0) | 2020.11.18 |
| 백준 01920 - 수 찾기 (0) | 2020.11.17 |
