- keys 배열에 ZRO 부터 NIN을 넣는다.
- 입력값의 각각의 개수를 반영하는 0으로 초기화한 counts 배열을 만든다.
- arr 배열을 모두 탐색하면서 해당하는 counts[index]++ 한다.
- result에 counts의 값에 해당하는 만큼 keys[index] string을 곱해서 넣는다.
counting sort를 썼지만 문자를 비교하는 과정이 너무 길고 비효율적이다.
T = int(input())
for tc in range(1, T+1):
result = ""
keys = ['ZRO', "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
counts = [0] * 10
TC, N = list(input().split())
N = int(N)
arr = list(input().split())
dic = {}
for i in range(N):
if arr[i] == "ZRO":
counts[0] += 1
if arr[i] == "ONE":
counts[1] += 1
if arr[i] == "TWO":
counts[2] += 1
if arr[i] == "THR":
counts[3] += 1
if arr[i] == "FOR":
counts[4] += 1
if arr[i] == "FIV":
counts[5] += 1
if arr[i] == "SIX":
counts[6] += 1
if arr[i] == "SVN":
counts[7] += 1
if arr[i] == "EGT":
counts[8] += 1
if arr[i] == "NIN":
counts[9] += 1
for j in range(10):
for k in range(counts[j]):
result += keys[j] + " "
print(f'{TC} {result}')
{숫자String: counting}
의 딕셔너리를 만든다.try
except
를 이용해 key값이 없으면 1을, 없으면 +1을 해준다.- counting 수만큼 숫자 String을 복사해서 result에 붙여준다.
counting_dict = {}
for num in arr:
try:
counting_dict[num] += 1
except:
counting_dict = 1
for i in keys:
for j in range(counting_dict[i]):
print(tc, end=" ")
print()