For Programmer
SWEA 1221 파이썬 문제풀이(GNS) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14jJh6ACYCFAYD
이 문제는 처음에 간단히 입력받은 단어의 인덱스를 그대로 새로운 리스트에 저장하여 오름차순으로 정렬한 후 그 인덱스에 맞는 글자들을 출력하려고 하였다. 그러나 더 시간효율적으로 좋은 풀이방법이 있었다. 그냥 입력받은 단어들의 개수를 리스트에 저장해놓고 그 단어들의 개수 만큼 차례대로 출력하는 방식이었다. 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
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA 1216 파이썬 문제풀이(회문2) (0) | 2022.02.10 |
---|---|
SWEA 1215 파이썬 문제풀이(회문) (0) | 2022.02.10 |
SWEA 6190 파이썬 문제풀이(정곤이의 단조 증가하는 수) (0) | 2022.02.10 |
SWEA 2805 파이썬 문제풀이(농작물 수확하기 ) (0) | 2022.02.10 |
SWEA 1979 파이썬 문제풀이(어디에 단어가 들어갈 수 있을까) (0) | 2022.02.09 |
Comments