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
반응형
'Algorithm' 카테고리의 다른 글
[BOJ/CPP] 부분합 - 1806번 / C++ 풀이 (0) | 2023.05.26 |
---|---|
[BOJ/CPP] 빈도 정렬 - 2910번 / C++풀이 (0) | 2023.05.12 |
[BOJ/C++] 자유 이용권 - 25635번 / CPP 풀이 (0) | 2023.04.09 |
[BOJ/C++] 팰린드롬 만들기 - 1254번 / CPP풀이 (0) | 2023.04.07 |
[백준/CPP] 근손실 - 18429번 / CPP 풀이 (0) | 2023.04.01 |