https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net

<문제 해설>
N의 개수가 큰것 부터가 기본적으로 sort하면 시간이 부족하다는 것을 알려준다.
따라서 수들을 정렬하지 않고 index로 생각해서 따로 리스트를 만든 뒤 수index의 value 값을 그수로 로 만드는 방식을 사용한다.
그후 리스트를 오름차순으로 value가 0이 아닌 index의 value만 출력해준다면 받아온 수들이 정렬된 효과를 볼수 있다.
<예시>
수 : 5,3,2

value가 1인 값만 출력:
2,3,5
<코드>
import sys
N = int(sys.stdin.readline())
Plist = [0]*1000001
Mlist = [0]*1000001
zero = 0
for i in range(N):
a = int(sys.stdin.readline())
if a <0:
Mlist[a] =a
elif a == 0:
zero = 1
else:
Plist[a] =a
for i in range(len(Mlist)):
if Mlist[i] != 0:
print(Mlist[i])
if zero ==1:
print(0)
for i in range(len(Plist)):
if Plist[i] != 0 :
print(Plist[i])
<코드 설명>
import sys : readline을 사용하기 위한 라이브러리 import
N = int(sys.stdin.readline()) : N값을 받아오는 변수
Plist = [0]*1000001 : 양수값 index들을 저장할 리스트
Mlist = [0]*1000001 : 음수값 index들을 저장할 리스트
zero = 0 : zero의 index
for i in range(N): N번 만큼 반복
a = int(sys.stdin.readline()) : 수를 받아오는 변수 a
if a <0: :a가 0보다 작다면
Mlist[a] =a : index가 음수이니 양수리스트에 넣어준다
elif a == 0: zero index 0이 들어간다면 그것을 표시하기위해 1로 만들어준다
zero = 1
else: a가 0보다 크다면
Plist[a] =a index가 양수이니 양수리스트에 넣어준다
for i in range(len(Mlist)): :음수리스트 탐색
if Mlist[i] != 0: :0이 아니면 숫자가 있는거니
print(Mlist[i]) :value값 출력
if zero ==1: :1이라면 0도 있었던거니 출력 아니면 미출력
print(0)
for i in range(len(Plist)): :음수 리스트와 같
if Plist[i] != 0 :
print(Plist[i])
'Coding Test > Python' 카테고리의 다른 글
[Python/백준] 10828 스택 (0) | 2023.01.11 |
---|---|
[Python/백준] 2869 달팽이는 올라가고 싶다 (1) | 2023.01.11 |
[Python/백준] 5430 AC (0) | 2023.01.11 |
[Python/백준] 10815 숫자 카드 (0) | 2023.01.09 |
[Python/백준] 2750 수 정렬하기 (0) | 2023.01.08 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간