79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 먼저 온다.
문제는 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하는 것이다.
첫째 줄에 M과 N이 주어진다.
M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력한다.
8 28
8 9 18 15 14 19 11 17 16 13
12 10 28 25 24 21 27 26 23 22
20
본인은 문제를 보자마자 딕셔너리 자료 구조를 써야겠다는 생각을 했다.
위에 주어진 예제를 예시를 들면, 8~28에 맞는 문자열을 value값으로 담은 다음 사전순으로 sort를 해버리면 쉽게 풀리는 문제라고 생각했다.
그렇게 하려면 0부터 9까지 해당하는 문자열을 일일히 담아야했다.
그래서 list에 [zero, one, two, ..., nine] 이런 방식으로 저장했다.
index 기준으로 찾으면 되기 때문에 index에 맞게 저장을 했다.
그리고 8~28을 for 문으로 돌려 8~28은 key로 해당하는 문자열은 value로 담는다.
M과 N은 무조건 100 이하이기 때문에 1의 자리 수일 경우에는 그냥 진행하면 되고, 그 이상일 때는 10으로 나눈 몫과 나머지를 이용하면 10의 자리수, 1의 자리수를 쉽게 만들어낼 수 있다.
그 다음에 key값을 기준으로 sort를 해서 출력만 하면 쉽게 풀리는 문제이다.
따라서 전체 코드는 다음과 같다.
M, N = map(int, input().split())
list = {}
char_list = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] # index에 맞게 문자열 저장
for i in range(M, N+1) :
if i < 10 :
list[i] = char_list[i]
else :
digit2 = i // 10
digit1 = i % 10
list[i] = char_list[digit2] + char_list[digit1]
result = sorted(list.items(), key = lambda x : x[1]) # key값을 기준으로 사전순 정렬
result_list = []
for i in range(len(result)) :
result_list.append(result[i][0])
if len(result_list) == 10 :
print(*result_list)
result_list = []
print(*result_list)