본문으로 바로가기

백준 01181 - 단어 정렬

category BOJ 백준기타 4년 전

출처 : 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