(풀이)
조합을 이용해서 일단 경우의 수를 먼저 뽑았다.
그리고 두 개의 리스트를 이용하여 탐색을 진행한다.
(단어 A와 단어 B가 일대일 관계여야한다는 거!)
ex) aa ab
A B
a - a
다음 문자열 탐색에서 a 는 무조건 a랑 이어져야 한다.
a - b
a랑 a랑 이어져야 하는데 a랑 b랑 이어져서
카운트는 하지 않는다.
ex) abca zbxz
A B
a - z
다음 문자열 탐색에서 a 는 무조건 z랑 이어져야 한다.
b - b
다음 문자열 탐색에서 b는 무조건 b랑 이어져야 한다.
c-x
다음 문자열 탐색에서 c 는 무조건 x랑 이어져야 한다.
a - z
a가 z랑 잘 연결되었으니까 문제 없음!
이 예시 같은 경우에는 결과값에 포함
from itertools import combinations
num = int(input())
array = []
for i in range(num):
array.append(input())
com_arr = list(combinations(array, 2))
result = 0
for i in com_arr:
str1, str2 = i[0], i[1]
visit1 = [0 for _ in range(26)] # visited1 : ord(str2[k])번째 위치에 str1[k] 요소 넣기.
visit2 = [0 for _ in range(26)] # visited2 : 중복체크용,
cnt = 0
if len(str1) == len(str2): # 조건 1) 길이가 같다면
for k in range(len(str1)):
a = ord(str1[k]) - ord('a')
b = ord(str2[k]) - ord('a')
if not visit1[b]: # 변환 위치에 알파벳이 비어있을 때
if visit2[a]: # aa zb인 경우 , a->z , a->b 중복
break
visit1[b] = ord(str1[k])
visit2[a] = 1
cnt += 1
continue
if visit1[b] == ord(str1[k]):
cnt+=1
continue
else:
break
if cnt == len(str1):
result += 1
print(result)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n11504] 돌려 돌려 돌림판 in python (0) | 2021.10.08 |
---|---|
[n14620] 꽃길 in python (0) | 2021.09.30 |
[n13900] 순서쌍의 곱의 합 in python (0) | 2021.09.28 |
[n1515] 수 이어 쓰기 in python (0) | 2021.09.28 |
[n18511] 큰 수 구성하기 in python (0) | 2021.09.27 |