개요
문자열(시퀀스)이 주어졌을 때, 우리의 과제는 두 번째로 많이 반복되는 단어를 찾는 것입니다. 이 문제는 파이썬의 Counter(iterator)를 활용하면 간단하게 해결할 수 있습니다. Counter는 단어를 키(key)로, 해당 단어의 빈도수를 값(value)으로 갖는 딕셔너리를 자동으로 생성해 줍니다.
알고리즘
- 사용자 정의 리스트를 생성합니다.
- 리스트를 딕셔너리로 변환합니다.
- 딕셔너리의 값들을 가져와 내림차순으로 정렬합니다.
- 정렬된 결과에서 두 번째 요소가 곧 두 번째로 큰 값입니다.
- 전체 딕셔너리를 다시 순회하면서, 값이 두 번째로 큰 값과 일치하는 키를 화면에 출력합니다.
예제 코드
# 파이썬 시퀀스에서 두 번째로 많이 반복되는 단어 출력하기
from collections import Counter
def secondrepeatation(A):
# 리스트를 딕셔너리로 변환
con = Counter(A)
res = sorted(con.values(), reverse=True)
maxi = res[1]
for (key, val) in con.items():
if val == maxi:
print("Second most repeated word ::>", key)
return
# 드라이버 프로그램
if __name__ == "__main__":
A = list() # 사용자 정의 리스트 생성
n = int(input("Enter the size of the List ::"))
print("Enter the word ::")
for i in range(int(n)):
k = input("")
A.append(k)
secondrepeatation(A) # 함수 호출실행 결과
Enter the size of the List ::4 Enter the word :: aa bb aa cc Second most repeated word ::> bb
코드 핵심 포인트
- Counter:
collections모듈의Counter는 리스트와 같은 반복 가능한 객체를 입력받아{요소: 빈도수}형태의 딕셔너리를 자동으로 만들어 줍니다. 위 예제에서는{'aa': 2, 'bb': 1, 'cc': 1}이 생성됩니다. - 내림차순 정렬:
sorted(con.values(), reverse=True)를 통해 빈도수를 내림차순으로 정렬하면, 인덱스 0은 최대 빈도수, 인덱스 1은 두 번째로 큰 빈도수가 됩니다. - 결과 출력: 딕셔너리를 순회하면서 두 번째로 큰 빈도수(
maxi)와 일치하는 첫 번째 키를 출력한 뒤return으로 함수를 종료합니다.
위 예제에서 'aa'는 2번으로 가장 많이 등장했고, 그다음 빈도수인 1번 등장한 단어 중 먼저 발견된 'bb'가 두 번째로 많이 반복되는 단어로 출력됩니다.