분류 전체보기
-
백준 10845 어떻게 풀었나, 큐(Queue) 구현백준 2022. 12. 31. 12:49
코드 import sys N = int(sys.stdin.readline()) stack = [] for i in range(N): cmd = sys.stdin.readline().strip() #push X: 정수 X를 큐에 넣는 연산이다. if "push" in cmd: stack.append(cmd[5:]) #pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. elif cmd == "pop": print(stack.pop(0) if stack else -1) #size: 큐에 들어있는 정수의 개수를 출력한다. elif cmd == "size": print(len(stack)) #empty: 큐가 비어있으면 1, 아니면 0을 출..
-
백준 10989번 어떻게 풀었나백준 2022. 12. 31. 00:01
푼 방법 2751번(수 정렬2)과 똑같은 코드를 제출했다. 그런데 pypy3, python3 둘다 제출해도 메모리 초과가 떳다. 이건 내가 알 수 없는 문제다라고 생각하고 바로 구글링 했다. - 검색을 해 보니 sort()를 쓰면 메모리 초과가 된다고 한다. 그래서 계수정렬(counting sort)를 써야 된다. 더 배우고 싶은 부분 계수정렬 코드 import sys N = int(sys.stdin.readline()) counting = [0]*10000 for i in range(N): a = int(sys.stdin.readline()) counting[a-1] += 1 for k in range(10000): if counting[k] != 0: for j in range(counting[k])..
-
백준 2751번 어떻게 풀었나백준 2022. 12. 30. 00:01
풀었던 방법 2750번(수 찾기)문제와 비슷해서 코드를 그대로 옮겨 보았다. 그런데 시간초과가 나왔다. 이건 도데체 뭔지 모르겠어서 검색해 보았더니 python3 대신 pypy3로 제출하면 된다고 했다. 정말로 그랬다. 좋았던점 내가 해결할 수 없는 부분은 빠르게 검색해서 시간을 아꼈다. 더 알고싶은 부분 pypy3와 python3의 차이점 PyPy3에서 실행시, 자주 쓰이는 코드를 캐싱하는 기능이 있기 때문에, 메모리를 조금 더 사용하여 그것들을 저장하고 있어, 실행속도를 개선할 수 있다. https://ralp0217.tistory.com/entry/Python3-와-PyPy3-차이 input()보다 readline()이 더 빠르다고 한다. 왜 그런지 궁금하다. 단순한 N값을 입력받을 때는 input..
-
백준 2750번 어떻게 풀었나백준 2022. 12. 29. 00:01
좋았던점 아날로그로 알고리즘을 생각하니 잘 떠올랐다. 재귀함수와 while문에 조건을 추가하는것의 차이점을 알았다. 재귀함수는 while문보다 오래걸리고, 간단하게 생각하면 된다. while문은 재귀함수보다 적게걸리고, 마지막 부분에 변수를 잘 바꿔 주어야 한다. 에러코드 보는 능력이 좋아진거 같다. 영상에서 봤던 insertion sort를 썻다. 고치면 좋을 부분 아니 그냥 정렬할거면 그냥 .sort()를 사용하면 됐었다. ???? 아니이걸 새롭게 알게 된 사실 파이썬의 .sort()와 sorted()는 Tim sort 알고리즘을 사용한다. 출처 - https://memostack.tistory.com/30 더 알아보고 싶은 것 Tim sort 코드 N = int(input()) A = [0]*N f..
-
백준 1920번 어떻게 풀었나백준 2022. 12. 28. 22:34
좋았던점 입력받기 고드 빠르게 잘 씀 Binary Search를 구현할때, 디버깅 좋았음 고치면 좋을 부분 알고리즘을 생각하는 과정에서 'Binary Search'을 몰랐음 무작정 Liner Search로 단순화 하려고 했는데 풀리지 않았음 고민해도 안풀리는 문제였음 디버깅 하는 방법을 좀더 익히면 좋겠음 아날로그 방식으로 알고리즘을 생각하면 더 잘 떠오를거 같음 코드 # N입력받기 N = int(input()) # 리스트 입력받기 A = list(map(int, input().split())) # M 입력받기 M = int(input()) # 리스트 입력받기 cheaklist = list(map(int, input().split())) A.sort() ret = [0]*M #이진검색 for k in r..
-
big O 간단한 설명영상, 글 요약 2022. 12. 26. 18:18
#1 서론 bigO는 알고리즘의 스피드를 표현하기 위해 만들어졌다. 알고리즘의 스피드를 '시간'으로 표현할 수 도 있다. 하지만 그렇게되면 기준이 정확하지 않다. 왜냐하면 실행하는 컴퓨터에 따라 실행 속도에 차이가 있기 때문이다. #2 본론 big O는 완료까지 걸리는 절차의 수이다. big O = n개의 인풋을 넣었을때, 아웃풋이 나오기까지 걸리는 절차의 수. 주의) 상수는 버린다. #3 결론 일일이 따지고 들어가면 헷갈리지만 간단히 정리해 보았다. #4 참고자료 https://youtu.be/BEVnxbxBqi8
-
array(배열) 기초 개념영상, 글 요약 2022. 12. 25. 18:45
#1 서론 들어가기전에, 메모리는 두가지 종류가 있다. 휘발성 메모리와 비휘발성 메모리이다. 휘발성(volatile) 메모리는 하드드라이브 같은 것이다. 비휘발성(non-volatile) 메모리는 램(RAM)같은 것이다. 램은 컴퓨터를 껏다 키면 데이터가 모두 날아가는 특징이 있다. 우리가 작성하는 코드, 프로그램은 모두 램에 저장 될 것이다. RAM의 약자는 Random Access Memory이다. 그러므로, 말 그대로 램은 랜덤으로 데이터를 불러올 수 있다. 1,2,3,,,,같이 순차적으로 불러오는 것이 아니라. 그래서 하드드라이브와는 다르게 빠른속도로 데이터를 불러올 수 있다. #2 본론 배열은 이 램에 최대길이를 미리 예약을 해 놓고, 데이터를 읽고 쓰는 것이다. 배열에서는 아래 4개의 행동을 ..
-
백준 2667번 어떻게 풀었나백준 2022. 12. 5. 11:50
좋았던점 메모에 어떻게 풀어나갈지, 쉬운거 부터 써가면서 시작하니까, 어느부분을 고민해야되는지 알 수 있어서 좋았다 어이없이 쉬운 알고리즘이라도 그것도 알고리즘이다 알고리즘을 점차 구체적으로 만들어 나가면 된다 그러다 보니, 재귀함수를 통해서 문제를 풀면 좋겠다는것을 깨달았다. 고치면 좋을 부분 파이썬을 아직 완벽하게 다루지는 못해서 입력과 리스트 손볼때 구글링이 좀 필요했다. 그런 부분은 알고리즘을 겪으면서 경험을 쌓는걸로.. 같은알고리즘을 계속 반복해야된다 -> 재귀함수