0 ~ 9 의 값을 나타내는 단어가 섞여 있는 문자열을 받아 작은 수부터 차례로 정렬하여 출력하는 문제.
T = int(input()) # 테스트케이스의 개수 T
for test_case in range(1, T+1):
_, N = input().split() # 테스트케이스 번호, 단어의 갯
ailen = {"ZRO":0, "ONE":1, "TWO":2, "THR":3, "FOR":4, "FIV":5, "SIX":6, "SVN":7, "EGT":8, "NIN":9}
reverse_ailen = {v: k for k, v in ailen.items()}
word = list(map(lambda x: ailen[x], input().split())) # 숫자로 해독한 단어들
word.sort() # 정렬
sort_ailen = list(map(lambda x: reverse_ailen[x], word)) # 외계인 언어로 해독
print("#%d %s" % (test_case, ' '.join(sort_ailen)))
[문제풀이]
SVN FOR ZRO NIN FOR EGT EGT TWO FOR FIV FIV ONE SVN ONE ONE FIV
이런 식으로 0-9를 의미하는 영단어가 섞여있는 문자열을 받아, 이걸 정리해서 다시 영단어로 바꿔 반환한다.
문제 자체는 엄청 쉬우나 예제가 엄청 길다....
난 딕셔너리와, map 함수를 사용해서 문제를 해결했다.
word = list(map(lambda x: ailen[x], input().split())) # 숫자로 해독한 단어들
처음 받을 때부터 lambda 함수와 map을 사용해 각 영단어와 숫자가 매치되있는 딕셔너리에 넣어 해독한 숫자값을 저장했다. 그리고 이걸 파이썬 내부적으로 제공하는 sort 함수를 사용해서 정렬.
sort_ailen = list(map(lambda x: reverse_ailen[x], word)) # 외계인 언어로 해독
그리고 아까 사용한 딕셔너리의 reverse 딕셔너리를 사용해서 다시 영단어로 바꿔 출력해주면 끝!