본문 바로가기

카테고리 없음

[Python, 파이썬] SWEA 1221. [S/W 문제해결 기본] 5일차 - GNS

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 딕셔너리를 사용해서 다시 영단어로 바꿔 출력해주면 끝!