오늘 첨으로 수학을 인강을보고 공부하려했으나 딴짓을하게되고 잠이 쏟아지고있다
역시 나는 필요할때 공부하는게 맞는 타입인것같다 머신러닝 프로제그 들어가면 그때 알아서 찾아서 공부할듯
본론으로 돌아와서 메모리 제한이 걸린 최초의 문제이다 난이도는 쉬운편
시간제한도 있긴하지만 널널한편이고 input()을 여러개 받는 문제특성상
input()을 sys.stdin.readline()으로 대체하면 시간이 매우단축되어 간단히 해결할수있다
난 sys.stdin.readline()사용에 좀 불만이있는게 두가지있는데
첫번째 백준은 모듈사용을 금지하고있는데 왜 sys는 허용하는건지(굳이..?왜?)
두번째 코랩하고 주피터밖에 못쓰는데 두군데 모두 sys.stdin.readline() 사용시 오류가 뜬다
그말은 실전에서 못쓴다는듯
다시 돌아와서 원래는 늘하던대로 여러줄 입력받은것 리스트에 넣고 정렬한뒤에 반복문으로 하나씩 출력하면
해결되는문제지만 메모리 제한이 있다
해결하는 사고 방식은 어떤부분을 줄일수 있나 생각해보는것이다
정렬을 하려면 어쨋든 모든 전체데이터를 다 받긴해야한다
숫자를 받으면서 동시에 정렬된 데이터를 출력하는건 말이안된다는 결론을 내렸다
이부분은 양보가 안되는부분이다 생각을좀하다가 옛날에 본 딕셔너리를 활용한 리스트속 중첩요소 정리가 생각났다
N은 천만개까지 주어지지만 N에 들어갈수있는 숫자는 최대 10000까지의 자연수이기때문에
N이커지면 중첩된수가 생긴다
코드
import sys
counter = {}
N=int(input())
for i in range(N):
b=(int(input()))
try: counter[b] += 1
except: counter[b] = 1
counter=sorted(counter.items())
# 메모리 덜소비위해 딕셔너리에 저장 그후 FOR문한번더써서 출력
for i in counter:
for j in range(i[1]):
print(i[0])
문제를 통해 메모리 라는개념에대해 한번 생각해볼수있었다
시간을아끼는법2 set (파이썬) (0) | 2022.05.21 |
---|---|
시간을 아끼는법 (0) | 2022.05.20 |
백준풀다 생성자와 분배합을 이용한 뻘짓(파이썬) (0) | 2022.05.15 |
220501공부(mysql) (0) | 2022.05.01 |
220501신규아이디추천(프로그래머스코테) (0) | 2022.05.01 |