건전한 건전지
728x90
반응형

 

https://www.acmicpc.net/problem/16499

 

 

16499번: 동일한 단어 그룹화하기

첫째 줄에 단어의 개수 N이 주어진다. (2 ≤ N ≤ 100) 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 10을 넘지 않는다.

www.acmicpc.net

 

같은 문자들로 이루어진 단어끼리 짝을 지어 몇개의 그룹으로 나뉘는지 알아내는 문제

ex) dog == god == gdo == dgo == odg ⋯ -> 같은 그룹

 

문자열을 입력받아 사전순으로 정렬한 후 set에 넣어서 같은 문자열들은 하나의 그룹으로 취급해준다.

(abcd, dbca, dcab -> sort를 사용하면 모두 abcd로 정렬됨)

 

전체 코드

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n; cin >> n;
    set <string> st;

    while (n--) {
    
    	// 문자열 입력
        string s; cin >> s;
        vector <char> vc;
		
        // vector에 넣어준 후
        for (int i = 0; i < s.size(); i++)
            vc.push_back(s[i]);
		
        // sort 해준다.
        sort(vc.begin(), vc.end());
        
        // set에 넣기 위한 임시 문자열
        string tmp;
        for (auto i : vc)
            tmp += i;
		
        st.insert(tmp);   
    }
    // set의 원소 개수 == 단어의 그룹 개수
    cout << st.size();
}

 

다른 분들의 코드를 보니 vector에 옮기는게 아니라 string 자체로도 정렬을 할 수 있어서 효율적인 코드 작성이 가능할듯 하다

728x90
반응형
profile

건전한 건전지

@건전한 건전지

나는 언리얼의 왕이 될 남자다 👑