파이썬에서 bfs는 어떻게 구현할까요? 이 말은 파이썬에서 어떻게 queue를 쓸까요? 와 같은 말입니다. collections에 deque가 있는데요. 그것을 이용하시면 됩니다. 예전에 list.pop(0)을 언급하면서 이야기를 잠깐 했던 기억이 나네요. [관련글] python에서 list.pop(0)을 쓰면 안 되나요? 먼저, append 부터 소개해 드리겠습니다. 이것은 오른쪽에, 원소를 추가합니다. 이 상황을 그림으로 그려 보겠습니다. 덱에 1만 있다고 해 봅시다. append(2)를 호출했다고 하면, 아래와 같이 될 겁니다. 1 오른쪽에 2가 추가되었습니다. 즉, 현재 deque에서 가장 오른쪽에 있는 것은 군청색으로 표시된 2인 것입니다. 다음에, 또 append 3을 하면 아래와 같이 될 겁..
코딩 검색 결과
java 코딩 테스트를 준비하시다 보면, 간혹 가다가 메모리 초과를 보는 일이 있습니다. 메모리 제한이 보정되지 않았다면요. 저는 이럴 때, 조금이나마 메모리를 덜 먹는 구조로 바꾸곤 하는데요. 예를 들자면 LinkedList를 ArrayDeque로 바꾼다던지 하는 식입니다. 오늘 설명할 내용은 그것은 아니고, visual VM으로 메모리 사용량을 어떻게 확인하는지 간단하게 알려드리려고 합니다. 당연하게도, 예시는 코테에 치중해서 다루도록 하겠습니다. 먼저, bfs를 구현할 때 많이 쓰는 Queue가 있습니다. 자바에는 Queue는 interface이고요. 그것을 구현한 것이 LinkedList, 즉 리스트 구조와, ArrayDeque, 즉 배열 구조가 있습니다. 사실, 전자보다 후자가 메모리를 조금 덜..
파이썬에는 ==와 is가 있습니다. 이 둘의 차이를 알아봅시다. 먼저 is 연산자는 identity를 비교합니다. 설명을 보면 알 수 있습니다. 같은 오브젝트를 가리키면 x is y가 참값을 가집니다. 그렇지 않으면, false가 됩니다. 반면에 ==는 동등성을 비교하는 것인데요. 이것만 보면 헷갈리실 수 있으니, 예제를 보겠습니다. dog 객체가 2개 있습니다. a와 b는 'cho'라는 정보를 담고 있는 강아지 객체입니다. 보시면 __eq__하고 __hash__가 재정의 되어 있음을 알 수 있습니다. __eq__는 단지, st만을 가지고 비교하게 됩니다. a와 b의 필드 st의 값은 'cho'로 같았습니다. 그리고, 문자열은 내용이 같으면 참입니다. 어찌 되었던 Dog('cho')와 Dog('cho')..
파이썬에는 dict와 OrderedDict가 있습니다. 이 둘에 대해 간단하게 알아봅시다. 아래 코드를 wandbox에서 python 3.5.0에서 실행시켜 보았습니다. 2번째 줄이 조금 길어보이는데요. 그리 어렵지 않습니다. ord('A')와 ord('Z')는 'A'와 'Z'를 코드로 변환시켜 줍니다. 그러면 i는 'A'의 코드값부터 'Z'의 코드값까지 돌 겁니다. 그런데, 앞에 chr(i)가 있으니, 결론적으로 li는 'A'부터 'Z'까지 들어가 버리게 됩니다. 3번째 줄에서는 li 안에 있는 것들을 돌면서, 'A', 'B', ... , 'Z' 순서대로 넣고 있습니다. 다음에, 5번째 줄에서는 dic를 순회하면서 요소들을 모두 출력합니다. 결과는 위와 같습니다. 중요한 것은 넣은 순서가 자료구조 내에..
python에는 random이 있습니다. 여기에 있는 메서드 중에서 sample과 choices의 차이를 알아봅시다. 먼저 예제 1번을 보겠습니다. 왠 리스트가 있는데요. li는 [1, 2, 3, 4, 5]입니다. 4번째 줄에서 rd.choices와 rd.sample을 호출하는데요. 결과만 보겠습니다. 전자는 [1, 1]이 나왔습니다. 그런데, 후자는 그렇지 않았네요. [1, 1]이 나온 경우도 있었습니다. 쉽게 말해서, choices는 공 n개가 있습니다. 먼저 n개 중에 하나를 뽑았습니다. 결과를 보고 다시 넣습니다. 그러면 공 n개가 들어 있을 겁니다. n개 중에 하나를 또 뽑습니다. 즉, 표본 크기가 n이라면, 그 중 하나를 뽑고, 다시 넣는 작업을 반복합니다. sample은 그렇지 않습니다. n..
최근댓글