문제
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
코드
import sys
n = int(sys.stdin.readline())
nl = [0] * 10001 # n의 범위(인덱스는 -1이므로 10001개 생성)
for _ in range(n):
nl[int(sys.stdin.readline())] += 1 # 해당 수의 개수만큼 인덱스에 추가
for i in range(10001):
if nl[i] != 0: # 인덱스에 수가 있다면
for _ in range(nl[i]): # 그 갯수만큼 출력
print(i)
- for문을 통해 append하면 for 문의 스텝마다 메모리 재할당이 일어나서 속도 저하와 비효율적인 메모리 사용을 야기한다.
- 따라서 미리 입력 값의 최대 값만큼 리스트를 만들어 둔다.
- 그 후 리스트의 인덱스에 해당 수의 개수 만큼 값을 추가하고 출력한다.
효율적으로 리스트에 값 추가하기
- 이렇게 for문을 돌려 list.append()를 하는 방식보다는
a = list(range(100000))
a2 = list()
for i in a:
a2.append(i*2)
- 리스트 컴프리헨션 방식이 더 좋고
a2 = [x*2 for x in range(100000)]
- map과 lambda를 활용한 map( lambda : , 리스트)가 가장 효율적이다.
a = list(range(100000))
a2 = map(lambda n: n*2, a)
- 참고한 블로그
https://yoonsang-it.tistory.com/49
백준 10989번 파이썬 풀이: 수 정렬하기 3
백준 1003번 수 정렬하기 3 알고리즘 분류: 정렬 링크: www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진
yoonsang-it.tistory.com
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 10816 : 숫자 카드 2 (0) | 2023.09.24 |
---|---|
[백준] 1181 : 단어 정렬 (0) | 2023.09.24 |
[백준] 11653 : 소인수분해 (0) | 2023.09.23 |
[백준] 1620 : 나는야 포켓몬 마스터 이다솜 (0) | 2023.09.23 |
[백준] 3052 : 나머지 (0) | 2023.09.21 |