코팅테스트/백준 문제 모음
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