본문 바로가기
PS/BOJ

[BOJ 1411] 비슷한 단어

by Saerong2 2020. 5. 7.

 

 

문제 링크

 

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

 

1411번: 비슷한 단어

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

www.acmicpc.net


아이디어

 

  • 문자열

  • 단순 구현

1. 같은 문자가 다른 문자로 바뀌는 경우 (aa -> bc)

2. 다른 문자가 같은 문자로 바뀌는 경우 (bc -> aa)

 

위의 두 가지 경우를 제외하고는 모두 바꿀 수 있다.

 


소스코드

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie();

    bool f = 0;
    int t, visit1[26], visit2[26], ans = 0;
    string str[101];

    cin >> t;
    for (int i = 0; i < t; ++i) {
        cin >> str[i];
    }

    for (int i = 0; i < t-1; ++i) {
        for (int j = i + 1; j < t; ++j) {
            if (str[i].length() != str[j].length()) continue;

            f = 0;
            memset(visit1, -1, sizeof(visit1));
            memset(visit2, -1, sizeof(visit2));
            for (int k = 0, len = str[i].length(); k < len; ++k) {
                if (visit1[str[i][k] - 'a'] != -1 && visit1[str[i][k] - 'a'] != str[j][k] - 'a') {
                    f = 1;
                    break;
                }
                if (visit2[str[j][k] - 'a'] != -1 && visit2[str[j][k] - 'a'] != str[i][k] - 'a') {
                    f = 1;
                    break;
                }
                visit1[str[i][k] - 'a'] = str[j][k] - 'a';
                visit2[str[j][k] - 'a'] = str[i][k] - 'a';
            }
            if (f) continue;
            ans++;
        }
    }
    cout << ans;
    return 0;
}

 

 

 

 

 

공부한 것을 정리하기 위한 기록입니다.

틀린 부분이 있다면 언제나 부드럽게 알려주세요.

'PS > BOJ' 카테고리의 다른 글

[BOJ 14503] 로봇청소기  (0) 2020.05.15
[BOJ 14499] 주사위 굴리기  (0) 2020.05.14
[BOJ 1421] 나무꾼 이다솜  (0) 2020.05.08
[BOJ 1564] 팩토리얼5  (0) 2020.05.04
[BOJ 1166] 선물  (0) 2020.04.30

댓글