본문으로 바로가기

백준 01181 - 단어 정렬

category BOJ 백준/기타 2020. 11. 22. 01:17

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