백준 2751번 '수 정렬하기 2' - [Python] sys

림민지·2025년 1월 21일

보고오면 좋은 것

🔗 https://velog.io/@minjee2758/%EB%B0%B1%EC%A4%80-10989%EB%B2%88-%EC%88%98-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-3-Python

#️⃣ 2751번

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.


✏️ 풀이

수 정렬하기3 과 비슷한 문제다! 하고 비슷한 알고리즘으로 풀었는데 그 결과는 틀렸습니다
왜냐면 내가 절댓값이 1,000,000보다 작거나 같은 정수이다. 이 조건을 제대로 안봤기 때문이다.
~~문제를 항상 잘 읽자~
리스트의 번호는 마이너스일 수 없다.
그러므로 *2를 해줘서 리스트 크기를 만들고, 음수에 +1000000해줘서 다 양수로 우선 넣어주자

🔮 코드

import sys

N = int(input())

L = [0] * 2000001
offset = 1000000

for i in range(N) :
    a = int(sys.stdin.readline())
    L[a+offset] += 1

for i in range(2000001) :
    if L[i] >0 :
        for j in range(L[i]):
            print(i-offset)

N을 입력받는다.
이후 절댓값 1,000,000의 수를 다 받으려면 리스트 안에 [0]를 2000001개로 만들어준다.

그리고 음수 값이 들어온다해도 양수로 저장해주기 위해 +1,000,000 해주고 각 인덱스에 맞는 리스트에 저장!

그러면 출력할땐, L[i]의 수가 0이 아닌 것을 차례대로 2000001개 뽑아내면 되는데, 음수를 위해서 일괄적으로
+1,000,000 해줬으니 print할때는 -1,000,000 해주면 된다!!

profile
@lim_128

0개의 댓글