본문 바로가기

코딩/Python

[Python] 백준 10989 수 정렬하기3

반응형

코드 작성

import sys
input = sys.stdin.readline
n = int(input())
k = [0]*10001
for _ in range(n):
    k[int(input())] += 1  
    
for i in range(1,10000):
    if k[i] != 0:
        for _ in range(k[i]): 
            print(i)

코드  풀이

#0.

이제까지 풀었던 것 중 계속 잊어버리고 공부하고, 잊어버리고 공부하고를 반복했던 문제이다.

문제를 틀리면 정답 코드를 보고 다시 글로 적어본다. 다음날 다시 반복하는데 실패하면 그 다음날 또 반복한다. 그렇게 12일이나 걸렸다.

 

 

#1. 메모리 초과

 코드 정렬문제는 간단하게 나타낼 수 있는데 아래 같이 작성할 경우 이 문제의 경우 메모리 초과가 나온다.

import sys
input = sys.stdin.readline
n = int(input())
k = []
for i in range(n):
        k.append(int(input()))
k.sort()
for i in k:
    print(i)

#2.
k라는 리스트에 0의 값으로 10001개의 요소를 만든다.

그리고 for문을 이용하여 입력값을 k리스트의 요소안에 넣고 그 값을 1로 입력한다.

ex) k[3930] = 1

 

#3.

다시 for문을 1부터 10000까지 돌려서 k[?]에 0이 아닌 값에 대해서

다시한번 for문을 이용하여 출력

import sys
input = sys.stdin.readline
n = int(input())
k = [0]*10001  #k=0을 인덱스 0 포함 10001개로 채움, k[0]=0, k[1]=0, k[2]=0 ...
for _ in range(n):
    k[int(input())] += 1  # k[n] = k[n] +1
    
for i in range(10001):
    if k[i] != 0:
        for _ in range(k[i]): #중복일 경우 한번 더 표현하기 위해서 작성
            print(i)
#예를들어 k[10]이 1이라면
#k[10]에 해당하는 값 모두 다시 for문
반응형