안녕하세요. 이번 시간에는 파이썬 입력 여러줄을 받는 방법을 알아봅시다. 보통, 최근에 나온 백준 문제들은 input의 갯수를 주거나, 끝을 알 수 있는 특정한 무언가가 있습니다. 그런데, 간혹 가다가, 파일의 끝을 판단해야 하는 경우가 있어요. 이럴 땐 어떻게 해야 할까요? 결론만 보시려면, 맨 밑에 단락만 보시면 되는데요. tracemalloc을 이용해서 trace 하는 것을 보시려면 글 전체를 읽어보시는 것도 좋습니다. 파일의 line이 매우 많지만, 한 라인 당 글자수는 100자를 넘지 않는다고 가정해 봅시다. 그 전에 tracemalloc은 메모리가 얼마나 할당되었는지 추적합니다. 문서를 보면, 자세히 알 수 있는데요. 이 글에서는 사용법을 상세히 알려드리진 않을 것입니다. 단지, 링크에 있는 ..
코딩/파이선 검색 결과
이번 시간에는 파이썬의 list comprehensions에 대해 알아봅시다. list를 간단하게 초기화 할 수 있는 방법입니다. 먼저 예제 3개를 보도록 하겠습니다. 예제 1번입니다. [k for k in range(10)]이 있네요. 뒤에서부터 해석해 봅시다. 일단 for K in A를 먼저 봐야 하는데요. A가 range(10)이였습니다. 게다가, range는 iterable 해요. 그러면, K의 값은 0부터 9까지 된다는 의미인데요. for 앞에 K가 붙어 있어요. 그러면 K값이 list의 원소가 된다는 의미입니다. 그러면, list에 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]가 나와야 할 텐데요. 정말 그렇게 나왔나 볼까요? 정말 그렇게 나왔습니다. 이제 필터링을 해 보겠습니다. 아..
함수 안에서 yield를 본 적이 있을 겁니다. 함수 안에서 이것을 쓰게 되면, 제너레이터가 됩니다. 이 문서에서는 어떻게 제너레이터를 쓰고 왜 쓰는지에 대해서 언급하지는 않습니다. 함수 안에서 yield를 썼을 때, 실행 문맥에 어떤 것을 저장하고 있길래, yield가 나타나면, 실행을 양보하고, 다시 foo를 호출하면, 그 다음 위치부터 실행시킬 수 있는지에 대해서 간단하게 고찰해 보겠습니다. main에서 foo를 호출했을 때를 생각해 봅시다. 이 때 foo(a)의 위치를 2, 그 다음 줄에 위치해 있는 a = a + 1을 위치 3이라고 해 보겠습니다. foo(a)를 호출하고, 리턴이 되면, 위치 3에 있는 a = a + 1이 수행됩니다. 그림으로 그려 보면 위와 같습니다. 이는, 함수를 호출할 때 ..
이번 시간에은 파이썬 divmod 메서드에 대해 알아봅시다. x와 y를 받으면 x를 y로 나눈 몫과, 나머지가 들어있는 tuple을 리턴하게 됩니다. 튜플은 for in으로 순회 가능합니다. 이를 이용해서 여러가지 작업을 해 보도록 하겠습니다. 이걸 어디에 써 먹을 수 있을까요? 7을 3으로 나눈 몫과 나머지를 구해야 한다고 생각해 봅시다. 저는 처음에 이런 식으로 썼었습니다. 7 // 3과 7 % 3을 썼었습니다. 7 / 3을 쓰지 않았음에 주의하세요. 7 / 3의 결과는 7을 3으로 나눈 몫인 2가 아닌 2.333..이 나오게 됩니다. 결과는 2 1이 나옵니다. 문제는 저렇게 쓰기가 귀찮다는 것입니다. 이런 귀찮음을 해결하기 위해, divmod를 쓴다는 것을 최근에야 알게 되었습니다. 이 메서드의 리..
진법은 항상 귀찮습니다. 예를 들어 10진수의 '12345'의 값을 10진수로 출력하거나, 16진수의 '12345'의 값을 10진수로 출력하거나. 이 귀찮음을 해결할 방법이 없을까요? 파이썬에는 int가 있습니다. 사실 저는 단순히 문자열을 정수로 변환하기 위해서 쓰는 줄로만 알았습니다. 이걸 잘 이용하면 k진수를 10진수로 바꿀 때, 대소문자가 오는 경우에 자릿수를 계산하는 귀찮은 처리를 덜 수 있습니다. 예제 몇 개를 보면서 이해해 보도록 하겠습니다. 먼저, 36진수로 표현된 'abcde', 'ABCDE'를 10진수로 바꿉니다. 다음에, 2진수로 표현된 '10110'을 10진수로 바꿉니다. 여기서, base 인자가 들어간 것이 있고, 들어가지 않은 게 있습니다. base 인자가 들어가면, 1번째 인자..
최근댓글