이번 시간에는 파이썬의 setrecursionlimit에 대해 알아봅시다. 설명을 보시면, 딱히 어렵지는 않습니다. 인터프리터의 maximum stack depth를 늘려줍니다. 스택 트레이스 할 때 그 뎁스를 의미합니다. 이 뎁스는 재귀 호출과 관련이 깊습니다. 예를 들어, 20000번째 피보나치 수를 M으로 나눈 결과를 재귀함수로 구한다고 생각해 봅시다. 메모이 제이션까지 적용한다면 위와 같이 구할 수 있습니다. dp[x]가 -1이 아닐 때에는 그냥 dp[x]를 리턴해 주고, 아니라면 x-1번째 피보나치와 x-2번째 피보나치를 더한 다음에 M으로 나눈 나머지를 리턴합니다. 그런데, RecursionError가 뜹니다. 이는, depth가 너무 많이 깊어져서 smash가 나지 않게 하기 위해서입니다. ..
파이썬 검색 결과
안녕하세요. 이번 시간에는 파이썬 tuple 활용법을 알아봅시다. 예제 프로그램을 봅시다. 제가 많이 쓰는 용법은 크게 3가지입니다. 튜플의 비교, 순회, 인덱스 접근. 이렇게 3개입니다. 이들은 사실, list와 비교했을 때 큰 차이가 없습니다. 3번째 줄을 보면, int를 5개 모아놓은 튜플 a와 b를 비교합니다. int는 비교 연산이 구현되어 있습니다. 그러므로, 아래와 같이 비교합니다. 두 개의 tuple이 있습니다. 위에 있는 것이 tuple a고 밑에 있는 것이 tuple b라고 해 봅시다. 첫 번째 원소를 비교합니다. 둘이 같습니다. 같으니까 2번째 원소끼리 비교합니다. 두 번째 원소도 비교해 봅니다. 역시 둘 다 같네요. 세 번째로 넘어갑니다. 그런데, 세 번째와 네 번째도 같습니다. 그러..
python의 Collections에는 자주 쓰일 법한 유용한 자료 구조들이 있습니다. 파이썬의 Queue 대신에 쓸 수 있는 deque도 있습니다. 이것은 다음에 언급하도록 하고요. 이 중에서 이번 시간에는 Counter를 어떻게 쓰는지 간단하게 알아보도록 하겠습니다. 먼저 예제 1번을 보겠습니다. 3번째 줄에서, cs[1] += 2가 있습니다. 이는, 키 1이 나오는 빈도를 2만큼 증가시킨다는 의미입니다. 4번째 줄에 cs[1]이 있는데요. 이는 키 1의 빈도를 가져옵니다. 2가 되겠네요. 다음에 5번째 줄에서는 cs.pop(1)이 있는데요. 이는 키 1을 제거한다는 의미입니다. 이전에 key 값이 1이고, v가 2인 정보가 있었어요. 키 1을 pop 메서드로 제거하면, 이 정보가 사라집니다. 그러면..
이번 시간에는 파이썬에서 구분자가 여러개일 때 split를 어떻게 쓰는지 알아봅시다. 문자열이 주어질 때, ,이나 $이나 .이 오면 이것을 구분자로 취해야 합니다. 예를 들어서, 예시 문자열은 123,..,4$567alpha일 때, split를 한 결과는 123, 4, 567alpha 순서대로 나와야 합니다. 단순하게, split만 쓰기 위해서는 구분자들을 하나의 구분자로 통일시키기만 하면 됩니다. 이 패턴은 실무에서 문자열 처리 할 때 자주 쓰이는지는 모르겠습니다. 그러나, 코딩 테스트에서는 심심찮게 쓰이는 스킬이므로 알아두시면 도움이 매우 많이 됩니다. 플로우를 볼까요? .과 ,과 $를 기준으로 분리하라고 했는데요. 이런 문제를 multiple delimeter라고 해요. 구분자다. 라는 정보가 사라..
안녕하세요. 이번 시간에는 파이썬 입력 여러줄을 받는 방법을 알아봅시다. 보통, 최근에 나온 백준 문제들은 input의 갯수를 주거나, 끝을 알 수 있는 특정한 무언가가 있습니다. 그런데, 간혹 가다가, 파일의 끝을 판단해야 하는 경우가 있어요. 이럴 땐 어떻게 해야 할까요? 결론만 보시려면, 맨 밑에 단락만 보시면 되는데요. tracemalloc을 이용해서 trace 하는 것을 보시려면 글 전체를 읽어보시는 것도 좋습니다. 파일의 line이 매우 많지만, 한 라인 당 글자수는 100자를 넘지 않는다고 가정해 봅시다. 그 전에 tracemalloc은 메모리가 얼마나 할당되었는지 추적합니다. 문서를 보면, 자세히 알 수 있는데요. 이 글에서는 사용법을 상세히 알려드리진 않을 것입니다. 단지, 링크에 있는 ..
최근댓글