알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 비슷한 단어(1406)

HRuler 2023. 3. 27. 14:08

1. 문제

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

 

1411번: 비슷한 단어

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 주어지는 문자열 개수
n = int(input())

# n_l : 문자열 저장 리스트
n_l = []
for i in range(n):
    n_l.append(input())
# print(n_l)

# simStrCnt : 비슷한 단어 쌍의 수
simStrCnt = 0
for i, v in enumerate(n_l):
#     print("i :", i)
    for j in n_l[i+1:]:
        str1 = v
        str2 = j
#         print("str1 :", str1)
#         print("str2 :", str2)
        while True:
            if len(str1) != len(str2):
                break
            elif len(str1) == 0:
#                 print("similar")
                simStrCnt += 1
                break
            str1_idx_zero = str1[0]
            str2_idx_zero = str2[0]
            if str1.count(str1_idx_zero) != str2.count(str2_idx_zero):
                break
            while True:
                findIdx = str1.find(str1_idx_zero)
                if findIdx == -1:
                    break
                str1 = str1[:findIdx] + str1[findIdx + 1:]
                str2 = str2[:findIdx] + str2[findIdx + 1:]
#                 print("trans_str1 :", str1)
#                 print("trans_str2 :", str2)
#                 print()
            str2 = str2.replace(str2_idx_zero, "")
            
print(simStrCnt)