문제 링크
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 |
댓글