1221 - GNS

박재현·2022년 2월 17일
0

알고리즘 부수기

목록 보기
24/43
post-thumbnail

문제 설명

링크

문제 풀이

  1. keys 배열에 ZRO 부터 NIN을 넣는다.
  2. 입력값의 각각의 개수를 반영하는 0으로 초기화한 counts 배열을 만든다.
  3. arr 배열을 모두 탐색하면서 해당하는 counts[index]++ 한다.
  4. 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}')

교수님 풀이

  1. {숫자String: counting}의 딕셔너리를 만든다.
  2. try except를 이용해 key값이 없으면 1을, 없으면 +1을 해준다.
  3. 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()
profile
공동의 성장을 추구하는 개발자

0개의 댓글