[Python] 코딩 도장 - 메모리공간 관리

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 메모리공간 관리] - Lv.1

프로그램 실행 순서

  1. 입력할 정수의 개수를 사용자로부터 입력 받는다.

  2. 입력받은 정수의 개수만큼 정수를 입력받는다.

  3. 입력받은 정수의 합과 평균 값을 출력한다.

  4. 할당된 메모리공간을 비운다.

요구사항

  1. 메모리공간은 사용자의 입력 수의 따라 변동된다.

  2. 사용한 공간은 마지막에 비워야 한다.

  3. 배열을 사용하면 안된다.

출처: https://codingdojang.com/scode/478?answer_mode=hide


[풀이]

import scipy
import gc

# 1
n = int(input("정수의 개수를 입력하세요."))

# 2
lst = []
for i in range(n):
    lst.append(int(input(f"{i+1}번째 정수를 입력하세요.")))

# 3
print("정수의 합:", sum(lst))
print("정수의 평균:", sum(lst) / n)

# 4
del n, lst
print(gc.collect())
정수의 개수를 입력하세요.3
1번째 정수를 입력하세요.1
2번째 정수를 입력하세요.2
3번째 정수를 입력하세요.3
정수의 합: 6
정수의 평균: 2.0
197

입력받은 정수의 개수만큼 숫자를 추가해서 합과 평균을 구한다.

사실 메모리에 대해서 아직까지는 개념이 부족한 것 같다.

메모리 해제에 대해서 검색하다가 DelftStack을 참조해서 작성하였다.

del로 객체를 삭제하였고, gc.collect()로 메모리에서 객체를 해제하였다.

이전에 머신러닝 완벽가이드 텍스트 분석[실습]에서도 사용한 경험이 있다.


[추천 풀이]

num_of_n = int(input("입력할 정수 개수: "))

Sum = 0
for x in range(num_of_n):
    Sum += int(input("Enter num%d: " % (x+1)))

print("Sum: %d" % Sum)
print("Avg:  %.2f" % (Sum / num_of_n))

del num_of_n, Sum, x
입력할 정수 개수: 3
Enter num1: 1
Enter num2: 2
Enter num3: 3
Sum: 6
Avg:  2.00

이번 문제는 추천수가 거의 1개, 2개로 풀이가 다양해서 그 중 하나를 가져왔다.

내 풀이랑 거의 유사한 형태인데 gc.collect()를 사용하진 않았다.

난이도순으로 문제를 풀다보니 오래된 문제여서 그런걸까? 잘 모르겠다.

추가로 사람들이 토론한 내용을 보니 배열을 사용하지 말란게 리스트도 안된다는 뜻이라 한다..

단순하게 넘파이 배열을 생각했는데.. 어쨌든 이 분도 리스트는 사용하지 않았다.

Leave a comment