😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[10989번] 수 정렬하기 3 / python3 (feat. sys.stdin.readline( ))

또방91 2021. 11. 3. 15:53
728x90

문제 링크: https://www.acmicpc.net/problem/10989

 

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net


❌ 1~3차시도 실패

 

시간초과 메모리초과 범벅 여정을 지나쳐 정답으로 가는 길....🚗 

어렵다 어려워ㅠㅠㅠ

먼저 나처럼 실패의 길을 보시렵니까

1
2
3
4
5
6
7
8
n=int(input())
num=[]
for _ in range(n):
    inp=int(input())
    num.append(inp)
    num.sort()
for i in num:
    print(i)
cs

보이시나요?

num리스트를 만들어 2번째줄부터의 N개의 줄을 리스트에 하나씩 넣고,나중에 하나씩 꺼내는 작업을 했습니다.

VS CODE에서 디버깅 잘 되었는데, 이런 결과가 난걸까요??

 

메모리 제한이 8MB네요... 시간제한도 5초네요. 엄청 조그만하고 귀엽지여...?

그래서 정답률이 23%밖에 안되었나봅니다... 켘

 

 


❓ 해결 방법은 ??

 

여기서 다른 고수님들 찬스를 써봅니다!!🎉

for 반복문 안에 input( )으로 여러 줄을 받는 경우, sort( )로 정렬을 사용할 경우에는 

시간초과 메모리초과가 생길수도 있다고.. 

그래서  sys 모듈에서의   sys.stdin.readline( ) 을 사용한다고 합니당.

     

      그럼 sys.stdin과의 차이점은 뭐지???라는 생각이.....갑자기 샛길로 빠짐(하.. 이르즈마....🥴)

      무작정 VS code에 쳐봤다....  

      내용은 길어질 것 같으니 따로 글을 올리겠다.. ㅠㅠ 휴

      https://coding-nurse.tistory.com/8?category=975208 

      요점은>>

      sys.stdin은 여러 번을 입력할 때 // sys.stdin.readline은 한 번을 입력할 때

 

그리고 s가 생길 수도 있고요. 

 

그리고 한줄씩 출력이 되어야하니, sys.stdin.readline() 을 사용해야하고요.

그럼 작성해볼까요?

 


💯 풀이 과정

 

음.... 먼저 input( )들을 sys.stdin.readline으로 바꿔서 입력한다고 생각하고

sorted( )방법을 쓸 수 없으니, 다른 방법으로는 먼저 리스트를 만들어서 각 리스트 자리에 나오는 만큼 카운트를 하고 나중에 출력 시 각 자리에 카운트 된 수만큼 반복 출력하면 됩니당

이러면 따로 정렬할 필요없이 앞에서부터 나오니까 답이 잘 나오겠죵?🤗

 

1
2
3
4
5
6
7
8
9
10
11
 
n=int(sys.stdin.readline())  #첫째 줄 n개가 주어짐
num=[0]*10001                #입력 수들이 10,000이하/ 0부터 시작하는 리스트는 10,001개를 만들어야 함
for _ in range(n):
    test=int(sys.stdin.readline())   #입력 수들을 정수로 받고
    num[test]+=1                     #입력된 정수의 리스트 자리에는 하나씩 카운트하여 나온 횟수 체크
 
#이제 리스트에서 하나씩 꺼내서 출력
for i in range(10001):               #리스트가 (0~10,000) 10,001번 반복해서 빼오면
    if num[i] !=0:                   #0인 경우엔 없으니 출력할 필요없고, 0이 아닌 경우만 출력
        for _ in range(num[i]):      #카운트 횟수인 리스트 각 자리만큼 반복 
cs

오늘도 하나 배웠다🤣

728x90