For Programmer

SWEA 1221 파이썬 문제풀이(GNS) 본문

코팅테스트/백준 문제 모음

SWEA 1221 파이썬 문제풀이(GNS)

유지광이 2022. 2. 10. 15:41
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14jJh6ACYCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


 

이 문제는 처음에 간단히  입력받은 단어의 인덱스를 그대로 새로운 리스트에 저장하여 오름차순으로 정렬한 후 그 인덱스에 맞는 글자들을 출력하려고 하였다. 그러나 더 시간효율적으로 좋은 풀이방법이 있었다. 그냥 입력받은 단어들의 개수를 리스트에 저장해놓고 그 단어들의 개수 만큼 차례대로 출력하는 방식이었다. 2가지 모두 올려놓겠다.

 

아래는 정렬해서 출력하는 1번째 방식이다.

T = int(input())
word_num = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
a_dict = {}

for i in range(len(word_num)):
    a_dict[word_num[i]] = i
for order in range(1, T + 1):
    order2, N = input().split()
    N = int(N)
    array = list(input().split())

    new_array = []
    for i in range(N):
        new_array.append(a_dict.get(array[i]))

    new_array.sort()
    print(f'{order2} ')

    for i in range(len(new_array)):
        print(word_num[new_array[i]], end=" ")
    print()

 

아래는 개수를 세서 개수만큼 출력하는 풀이이다.(시간효율도 면에서 상당히 좋다.)

import sys

sys.stdin = open('input.txt', 'r')

T = int(input())
word_num = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
a_dict = {}  # 빠른 연산을 위해 위의 정보를 딕셔너리에 담을 변수 선언

for i in range(len(word_num)):  # 해당 영어정보를 딕셔너리에 담는다.
    a_dict[word_num[i]] = i

for order in range(1, T + 1):
    order2, N = input().split()
    N = int(N)
    array = list(input().split())

    cnt = [0] * 10  # 각 영어단어의 개수를 셀 리스트 선언
    for i in range(N):  # 입력받은 영어단어를 돌면서
        cnt[a_dict[array[i]]] += 1  # 해당 단어의 인덱스에 개수를 +1 해준다.

    print(f'{order2} ')

    for i in a_dict:  # one  ~ nin 까지 저장된 개수만큼 출력하기 위해
        print((i + ' ') * cnt[a_dict[i]])  # 저장된 개수만큼 곱해준다.
728x90
Comments