백준 10989 파이썬 메모리와 시간 초과 sort를 쓰지 않고 intput 대신 int(sys.stdin.readline())

2024. 4. 7. 08:13코딩/백준 (단계별)

반응형

백준 10989 - 수 정렬하기 3

문제

https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

10989번

답안 코드 :

import sys

N = int(sys.stdin.readline())

# 아이디어는 수를 입력받으면서 바로 해당 위치에 출력

x = [0] * 10001

for _ in range(N):
    num = int(sys.stdin.readline())
    x[num] += 1     # 횟수를 기록

# 해당 수의 등장 횟수만큼 출력
for i in range(10001):
    if x[i] > 0:    
        for _ in range(x[i]):
            print(i)

 

백준 / 문제 / 단계별로 풀어보기 / 13단계 정렬

생각 :

시행착오

 
import sys

N = int(sys.stdin.readline())

x = []
for _ in range(N):
    x.append(int(sys.stdin.readline()))

x.sort()

for i in range(N):
    print(x[i])

# 위 코드는 메모리 초과

# 변경된 점:

# 리스트 x를 미리 크기 N으로 초기화하였습니다.
# 입력을 받을 때 x 리스트에 직접 값을 할당하였습니다.
# 불필요한 변수를 최소화하고, 반복문에서 변수 i만 사용하도록 하였습니다.

import sys

N = int(sys.stdin.readline())

x = [0] * N

for i in range(N):
    x[i] = int(sys.stdin.readline())

x.sort()

for i in range(N):
    print(x[i])

# 또 메모리 초과라서 더 줄여야함 .. 허

# 변경된 점:

# 입력값을 받을 때 바로 정렬하여 출력하였습니다.
# 리스트를 사용하지 않고, 입력과 출력을 각각 처리하였습니다.
# sys.stdin.readlines()를 사용하여 여러 줄을 한 번에 입력 받았습니다.
# end=''를 사용하여 print 함수에서 자동으로 추가되는 개행 문자(\n)를 없애고, 한 줄에 모든 출력을 출력했습니다.

#################

# 여기서 더 줄이려면
# sort를 쓰지 않고, intput 대신 int(sys.stdin.readline()) 이 함수를 쓰는것

import sys

N = int(sys.stdin.readline())

# 아이디어는 수를 입력받으면서 바로 해당 위치에 출력

x = [0] * 10001

for _ in range(N):
    num = int(sys.stdin.readline())
    x[num] += 1     # 횟수를 기록

# 해당 수의 등장 횟수만큼 출력
for i in range(10001):
    if x[i] > 0:    
        for _ in range(x[i]):
            print(i)

#입력으로 받은 수의 등장 횟수를 x 리스트에 기록합니다.
# 최종적으로 x 리스트를 순회하면서 해당 수의 등장 횟수만큼 그 수를 출력

 

반응형

'코딩 > 백준 (단계별)' 카테고리의 다른 글

백준 11650 파이썬 lambda  (4) 2024.04.09
백준 1427 파이썬 예시  (12) 2024.04.08
백준 2751 파이썬 시간초과 sys.stdin.readline()  (1) 2024.04.06
백준 25305 파이썬  (1) 2024.04.05
백준 2587 파이썬  (12) 2024.04.04