문제
풀이
어떻게 풀어야할까 고민하던 중 힌트가 이미 나왔다.
카운팅 정렬을 이용하면 풀 수 있다는 것이다.
그래서 아래와 같이 풀었다.
import sys
# 입력받기
input = sys.stdin.readline
n = int(input())
input_array = list()
for _ in range(n):
input_array.append(int(input()))
# 카운팅 배열 선언
counting_array = [0] * (max(input_array)+1)
for num in input_array:
counting_array[num] += 1
# 카운팅 직전 개수 더하기
for i in range(1, len(counting_array)):
counting_array[i] += counting_array[i-1]
output_array = [-1] * len(input_array)
# 카운팅 인덱스 검색 후 아웃풋 배열에 삽입
for num in input_array:
index = counting_array[num] - 1
output_array[index] = num
counting_array[num] -= 1
print(*output_array, sep="\n")
이렇게 정석같이 푸니 아래와 같이 메모리초과가 나왔다. T_T
그래서 중간 절차를 생략하고 배열하나를 이용해서 풀어보았다.
import sys
# 입력받기
input = sys.stdin.readline
n = int(input())
array = [0] * 10000
for _ in range(n):
# 입력값을 배열 인덱스로 설정. 개수 추가해주기
array[int(input())] += 1
for i in range(len(array)):
if array[i] != 0:
# 해당숫자의 개수만큼 출력
for _ in range(array[i]):
print(i)
이렇게 바로 출력으로 이어지게 하니 맞았다!
'알고리즘 테스트' 카테고리의 다른 글
[프로그래머스/파이썬] 배달 (0) | 2021.05.06 |
---|---|
[프로그래머스] 네트워크 (0) | 2021.04.17 |
[백준 1260번] DFS와 BFS (Python) (0) | 2021.02.06 |
[백준 1427번] 소트인사이드 (Python) (0) | 2021.01.20 |
[백준 2751번] 수 정렬하기2 (Python) (0) | 2021.01.19 |