일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- TiL
- 핀토스
- 다익스트라
- anonymous page
- 네트워크
- 크래프톤 정글 4기
- project3
- 알고리즘수업-너비우선탐색2
- 전쟁-전투
- 4기
- 이벤트 함수 실행 순서
- 백준
- kraftonjungle
- Unity
- C
- 연결리스트
- 크래프톤 정글
- 티스토리챌린지
- User Stack
- 크래프톤정글4기
- 유니티
- 알고리즘
- pintos
- BFS
- 파이썬
- c#
- 크래프톤정글
- 추상클래스와인터페이스
- KRAFTON JUNGLE
- 오블완
Archives
- Today
- Total
말감로그
[백준] 10989 수 정렬하기3 (파이썬) 본문
728x90
문제
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
input = sys.stdin.readline
n = int(input())
nums =[]
for i in range(n):
nums.append(int(input()))
nums.sort()
for s in nums:
print(s)
빈 리스트를 만들어서 입력값을 하나씩 append하고 오름차순으로 정렬해서 출력하는 코드를 짰는데
메모리 초과로 틀렸다.
정답 코드
import sys
input = sys.stdin.readline
n = int(input())
nums = [0] * 10001
for _ in range(n):
nums[int(input())] += 1
for i in range(10001):
if nums[i] != 0:
for j in range(nums[i]):
print(i)
for 문 속에서 append를 사용하게 되면 메모리 재할당이 이루어져서 메모리를 효율적으로 사용하지 못한다.
그래서 입력값이 10000개까지 주어질 수 있으니 10000개 만큼의 리스트를 만들어 놓고(인덱스는 0부터 시작하니까 10001개 생성) 리스트에 각 요소마다 0을 할당하여 입력값을 받을 때마다 그 입력값과 같은 인덱스에 +1씩 해준다.
입력을 다 받고나서 0보다 큰 요소를 갖는 인덱스들을 찾아서 그 수만큼 인덱스를 출력해주면 된다.
파이썬은 내장함수를 사용하면 메모리를 효율적으로 관리할 수 있다.
728x90
'백준' 카테고리의 다른 글
[백준] 2231번 분해합 (파이썬) (0) | 2024.02.27 |
---|---|
[백준] 9372번 상근이의 여행 (파이썬) (0) | 2024.02.22 |
[백준] 10816번 숫자 카드 2 (파이썬) (0) | 2024.02.16 |
[백준] 2776번 암기왕 (파이썬) (0) | 2024.02.16 |
[백준] 9012번 괄호 (파이썬) (1) | 2024.02.13 |