애너그램? 두 문자가 있을때, 두 문자의 알파벳 순서를 무시하고 둘 다 동일하면 애너그램이다
예) eat, ate
N개의 단어가 주어졌을 때, 애너그램을 알파벳 순으로 다음과 같이 정렬하시오.
1. 서로 애너그램인 단어들은 하나의 그룹으로 묶어 한 줄에 오름차순으로 정렬하여 출력한다.
2. 애너그램 그룹의 가장 첫 번째 단어의 오름차순으로 각 그룹을 출력한다.
예를 들어, N=6개의 단어 eat, tea, tan, ate, nat, bat 가 입력으로 주어지면,
다음과 같이 세 개의 애너그램 그룹으로 나누어 한 줄에 하나의 그룹을 출력한다.
ate eat tea
bat
nat tan
위에서 각 애너그램 그룹의 첫 단어인 ate, bat, nat가 오름차순으로 그룹의 출력 순서를 결정한다.
또한, 각 그룹에서도 오름차순으로, ate, eat, tea 처럼 오름차순으로 정렬하여 출력한다.
Input
첫째 줄에 단어의 개수 N이 주어진다.
둘째 줄부터 N개의 줄에 한 줄에 하나의 단어가 주어진다.
단어는 모두 영어 알파벳 소문자로만 구성되어 있다고 가정해도 된다.
6
eat
tea
tan
ate
nat
bat
16
undisplayed
trace
tea
singleton
eta
eat
displayed
crate
cater
carte
caret
beta
beat
bate
ate
abet
Output
한 줄에 하나의 애너그램 그룹을 출력한다.
각 애너그램 그룹은 알파벳 오름차순으로 정렬하여 출력한다.
출력하는 애너그램 그룹의 순서는 각 그룹의 첫 번째 단어의 오름차순으로 정한다.
ate eat tea
bat
nat tan
abet bate beat beta
ate eat eta tea
caret carte cater crate trace
displayed
singleton
undisplayed
import sys
input = sys.stdin.readline
n = int(input())
# 애너그램 그룹의 가장 첫 번째 단어의 오름차순으로 각 그룹을 출력한다 -> 입력을 받을 때 미리 모든 단어들을 오름차순 정렬하면 된다
array = sorted(list(input().strip()) for _ in range(n))
answer = {} # 해시 테이블
def check(word):
tmp = ''.join(sorted(word)) # 단어를 알파벳 순으로 정렬
if tmp in answer: # 해시 테이블에 이미 있으면 append
answer[tmp].append(''.join(word))
else: # 해시 테이블에 없는 단어이면
answer[tmp] = [''.join(word)]
# 각각의 단어들에 대해 애너그램인지 check
for i in range(n):
check(array[i])
answer = list(answer.values())
for i in range(len(answer)):
print(' '.join(answer[i]))
'Problem Solving' 카테고리의 다른 글
[DP] 이항 계수의 합 (0) | 2022.12.14 |
---|---|
[DP] 세보나치 수열 (0) | 2022.12.14 |
[Hash Table] 수평선과 수직선 (0) | 2022.12.13 |
[Hash Table] 로마숫자의 소인수 (0) | 2022.12.13 |
[Hash Table] 과일 가게: 많이 팔린 순서로 정렬 (0) | 2022.12.13 |