반응형
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1 복사
10
5
2
3
1
4
2
3
5
1
7
예제 출력 1 복사
1
1
2
2
3
3
4
5
5
7
문제 풀이
더보기
import sys
#계수정렬 활용
N = int(sys.stdin.readline())
arr = [0] * (10000+1) # 입력값이 10000개까지 주어지니 10000 + 1개의 리스트 선언
#각 입력값에 해당하는 인덱스의 값 증가
for _ in range(N):
arr[int(sys.stdin.readline())] += 1
#arr에 기록된 정보 확인
for i in range(len(arr)):
if arr[i] != 0: #0이 아닌 데이터, 즉 입력받은 데이터들을 출력
for _ in range(arr[i]):
print(i)
이 문제는 계수 정렬을 이용해서 푸는 문제다. sort를 이용하면 메모리 초과때문에 쓸 수가 없다.
인덱스를 계산하는 방법으로 풀어야함.
(1) 리스트를 [0] * (데이터의 길이 + 1)만큼 선언한다.
arr = [0] * (10000 + 1)
arr [0 ,0, 0, 0,......] 10001개의 인덱스 생성
(2) 입력값을 받을 때마다 그 입력값과 같은 인덱스에 +1 추가
for _ in range(n):
arr[int(input())] += 1
1 1 1 3 2 1을 입력 받았다면 1이 4개, 2가 1개, 3이 1개 이므로
arr[0,4,1,1]이 될 것이다
(3) 입력이 끝나면 0이 아닌 인덱스를 찾아 그 수만큼 인덱스를 출력해주면 된다.
for i in range(len(arr)):
if arr[i] != 0:
for _ in range(arr[i]):
print(i)
'코딩테스트 > 파이썬 코딩테스트' 카테고리의 다른 글
단어 정렬 (백준 1181번 , 파이썬) (1) | 2023.10.08 |
---|---|
소수 찾기 (백준 1978번 , 파이썬) (0) | 2023.10.07 |
알파벳 찾기 (백준 10809번 , 파이썬) (0) | 2023.10.01 |
ACM 호텔 (백준 10250번 , 파이썬) (1) | 2023.09.30 |
OX퀴즈 (백준 8958번 , 파이썬) (0) | 2023.09.26 |