소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 패캠챌린지
  • 패스트캠퍼스
  • 문제
  • 직장인인강
  • 코드스테이츠
  • 패스트캠퍼스후기
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 알고리즘
  • 백준
  • 직장인자기계발

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 10989번 : 수 정렬하기3

2022. 1. 13. 15:43

 

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

 

문제 풀이

단계별로 풀어보기 - 정렬 단계엔 총 3개의 수 정렬하기 문제가 포함되어 있다.

다른 문제들은 아래와 같이 해서 제출하면 시간이나 메모리를 초과하지 않았으나

이번 문제에선 메모리 제한이 8MB로 되어있고, 입력되는 개수의 범위가 매우 커서(<=10,000,000)  메모리 초과가 발생한다.

num = int(input())
nums = []
for _ in range(num):
    nums.append(int(input()))

nums.sort()
for i in range(num):
    print(nums[i])

따라서 메모리 초과를 피하기 위해서는 수의 범위가 10,000이하로 정해져 있기 때문에 이전에 배운 계수 정렬을 이용해야 한다.

먼저 10,000까지의 리스트를 만들고 몇 개인지 체크해서 프린트 해주면 된다.

또한 입력되는 숫자의 개수가 많기 때문에 sys.stdin.readline()로 입력을 받아야 한다.

 

코드

import sys

num = int(input())
nums = [0] * 10001

for _ in range(num):
    n = int(sys.stdin.readline())
    nums[n] += 1

for i in range(1, len(nums)):
    # 0개가 아니면 개수만큼 출력
    if nums[i] != 0:
        for _ in range(nums[i]):
            print(i)

 

728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 2580번 : 스도쿠  (0) 2022.01.17
[Baekjoon] 9663번 : N-Queen  (0) 2022.01.16
[Baekjoon] 1436번 : 영화감독 숌  (0) 2022.01.12
[Baekjoon] 1018번 : 체스판 다시 칠하기  (0) 2022.01.12
[Baekjoon] 2447번 : 별 찍기 - 10 / 11729번 : 하노이의 탑  (0) 2022.01.11
    소토
    소토

    티스토리툴바