CS/알고리즘_문제풀이(파이썬)

비슷한 단어

Jedy_Kim 2021. 7. 19. 21:51
728x90

문제

만약 어떤 단어A를 숌스럽게 바꿔서 또다른 단어 B로 만든다면, 그 단어는 비슷한 단어라고 한다.

어떤 단어를 숌스럽게 바꾼다는 말은 단어 A에 등장하는 모든 알파벳을 다른 알파벳으로 바꾼다는 소리다. 그리고, 단어에 등장하는 알파벳의 순서는 바뀌지 않는다. 두 개의 다른 알파벳을 하나의 알파벳으로 바꿀 수 없지만, 자기 자신으로 바꾸는 것은 가능하다.

예를 들어, 단어 abca와 zbxz는 비슷하다. 그 이유는 a를 z로 바꾸고, b는 그대로 b, c를 x로 바꾸면, abca가 zbxz가된다.

단어가 여러 개 주어졌을 때, 몇 개의 쌍이 비슷한지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 한 줄에 하나씩 단어가 주어진다. 단어의 길이는 최대 50이고, N은 100보다 작거나 같은 자연수이다. 각각의 단어는 모두 다르며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 총 몇 개의 쌍이 비슷한지 출력한다.

예제 입력 1 

5

aa

ab

bb

cc

cd

예제 출력 1

4

 

# 접근법

개인적으로 지문이 좀 이상하다...

? 상태로 먼소린가 하면서 문제를 3번 정도 읽었다...

 

[aa, ab, bb, cc, cd]

입력 값을 

11, 12, 11, 11, 12

이런식으로 치환해준다.

 

#코드

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
import sys 
      
if __name__ == "__main__":
  input = sys.stdin.readline
  n     = int(input())
  arr   = [ input().strip() for _ in range(n) ]
  res_list = [] 
 
  for i in arr:
    cnt       = 0
    tmp_str   = ''
    res_str   = ''
    tmp_myDic = {}
    for j in i:
      try:
        res_str+=tmp_myDic[j]
      except:
        cnt+=1
        tmp_myDic[j]=str(cnt)
        res_str+=tmp_myDic[j]
    res_list.append(res_str) 
 
    
  res_cnt = 0
  for i in range(len(res_list)-1):
    for j in range(i+1len(res_list)):   
      if res_list[i] == res_list[j]:
        res_cnt+=1
  print(res_cnt)
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

수 이어 쓰기 1  (0) 2021.07.21
이동하기  (0) 2021.07.21
숨바꼭질 4  (0) 2021.07.19
두 문자열 사이의 거리  (0) 2021.07.19
자원 채취  (0) 2021.07.16