본문 바로가기

Python(알고리즘,문제풀이)/BOJ(Bronze I)

백준 / 10989 / 수 정렬하기3 / Python

728x90

📚문제

출처 : 백준 10989번(https://www.acmicpc.net/problem/10989)


📝풀이

# 10989 수 정렬하기 3
import sys
cnt_array = [0 for _ in range(10001)]

for _ in range(int(input())):
    num = int(sys.stdin.readline().rstrip())
    cnt_array[num] += 1

for i in range(len(cnt_array)):
    if cnt_array[i] != 0:
        print('{0}\n'.format(i)*cnt_array[i], end='')

개념이나 풀이법을 몰라서 어려운 문제도 있지만

이렇게 같은 코드로 메모리나 시간을 줄이는 

방법도 어려운 것 같다...

 

알고리즘 문제에서 

"모든 입력을 배열에 저장하면 메모리 초과가 된다" 고 한다

참고링크 출처 : https://www.acmicpc.net/board/view/26132

 

+ 위 코드는 구글링하여 발견한 코드인데

마지막 for문 부분의

print문 코드는 잘 이해가 가지 않고

(근데 저 코드로 제출해 봤는데 오히려 메모리 초과가 발생...🤣)

나중에 풀어도 내가 저렇게 풀 수 있을 것 같지 않아서

내 방식대로 바꿔봤다

for idx,k in enumerate(cnt_array):
    if k !=0:
        for _ in range(k):
            print(idx)

 

내가 자주 사용하는 enumerate이기도 하고

이 편이 훨씬 직관적인것 같다!

 

 

📌최종 코드

# 10989 수 정렬하기 3
import sys
cnt_array = [0 for _ in range(10001)]

for _ in range(int(input())):
    num = int(sys.stdin.readline().rstrip())
    cnt_array[num] += 1

for idx,k in enumerate(cnt_array):
    if k !=0:
        for _ in range(k):
            print(idx)

 

728x90