짱아의 개발 기록장

백준 1411번. 비슷한 단어(c++) / 문자열 처리 본문

Algorithm/Baekjoon

백준 1411번. 비슷한 단어(c++) / 문자열 처리

jungahshin 2020. 8. 10. 14:05
반응형

문자열 처리문제이다.

나는 생각보다 쉬운 문제지만, 어떻게 풀지 고민하는 데에 상당히 많은 시간을 할애한 것 같다.

잘못된 방식으로 풀었다가 시간 낭비를 많이 했다.

 

ex) abaa -> 1211 / ccbc -> 1121 / abcd -> 1234

이런식으로, 같은 문자는 같은 번호로 다른 문자라면 +1을 증가시켜주는 형태로 전체 문자열을 숫자로 표현해주었다.

 

 

코드 첨부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 비슷한 단어
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
using namespace std;
 
int n;
string s;
vector<string> S;
int final = 0;
vector<string> total;
int v[30= {0, };
 
int main()
{
    cin>>n;
    for(int i=0; i<n; i++){
        cin>>s;
        S.push_back(s);
    }
 
    for(int i=0; i<S.size(); i++){
        int counter = 0;
        memset(v, 0sizeof(v));
 
        map<intint> m;
        string temp = S[i];
        string t;
        for(int j=0; j<temp.size(); j++){
            if(m.count(temp[j]-'a')==0){
                m[temp[j]-'a'= 1;
                counter++;
                v[temp[j]-'a'= counter;
                t += to_string(counter);
            }else{
                t += to_string(v[temp[j]-'a']);
            }
        }
 
        total.push_back(t);
    }
 
    for(int i=0; i<total.size(); i++){
        for(int j=i+1; j<total.size(); j++){
            if(total[i]==total[j]){
                final++;
            }
        }
    }
 
    cout<<final<<"\n";
    return 0;
}
cs

 

 

문제 첨부

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

 

1411번: 비슷한 단어

첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 한 줄에 하나씩 단어가 주어진다. 단어의 길이는 최대 50이고, N은 100보다 작거나 같은 자연수이다. 각각의 단어는 모두 다르다.

www.acmicpc.net

반응형
Comments