파이썬은 배열 회전은 zip을 이용하면 1줄에 끝내버릴 수 있습니다. 그 방법을 알아봅시다. 3번째 줄이 90도 회전하는 소스입니다. c++로 구현할 때, 줄수가 꽤 길었는데요. 파이썬은 의외입니다? zip과 asterisk, 그리고 list 컴프리헨션으로 간단하게 구현할 수 있어요. 이 과정을 하나 하나 짚어보겠습니다. 먼저, zip(*li) 부터 보겠습니다. 이것에 대한 문법적인 설명은 다음에 언급하도록 하겠습니다. zip을 쓸 때 짝꿍처럼 많이 쓰이니, 이디엄처럼 외워 봅시다. 문서를 보시면 li가 [1, 2, 3]일 때, f(*li)는 f(1, 2, 3)과 똑같습니다. 그러면, li가 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]일 때, zip(*li)는 무엇..
array 검색 결과
백준을 풀 때 numpy를 이용할 일이 가끔 있었습니다. 이번 시간에는 어떻게 numpy array를 초기화 하고, numpy 배열을 어떻게 파이썬의 리스트로 바꾸는지 보도록 하겠습니다. 그리고 list를 어떻게 넘파이 배열로 바꾸는 지도 배워봅시다. 보통 저는 int로 이루어진 배열을 많이 이용하니, 이걸 기준으로 설명해 보도록 하겠습니다. 코드를 보시면, li는 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]입니다. 2차원 리스트임을 알 수 있어요. 이것을 그대로 np.array의 인자로 넘겨주면 됩니다. 결과는 어떻게 나올까요? 3행 4열짜리 numpy array가 만들어 졌습니다. 이제 다른 것을 해 봅시다. 1행 10열짜리 int list가 들어갑니다. 그런데,..
c언어를 공부하시다 보면, 한 번 쯤 막히는 부분이 있습니다. 배열 포인터. 쉽게 말해서 배열을 가리키는 무언가입니다. 나중에 행 우선 열 우선 방식을 할 때 다시 언급을 하고, 여기에서는 간단하게 언급을 하겠습니다. 이 글을 읽기 위해서 중요한 것은 배열은 배열 그 자체로 다루어야 한다는 점입니다. 4번째 줄을 보시면, 4 by 4짜리 배열이 선언되어 있습니다. 그리고 5번째 줄에, int (*p)[4] = &(a[0])이라 되어 있는데요. 좌항부터 해석해 보겠습니다. 시계 방향 rule에 따라서 보도록 하겠습니다. 먼저, 4번째 줄부터 해석되는데요. (*p)는 p가 포인터이다. 라는 의미입니다. 그런데, 어떤 포인터일까요? 돌려 보니까 [4]라고 되어 있습니다. 이것은 [4]개짜리의 원소를 가진다는 ..
1달 2주 정도만에 자료구조 포스팅으로 돌아왔습니다. 와아아~. 생각난 김에, 안드로이드의 sparse Array에 대한 이야기를 해 보도록 하겠습니다. 당장 android의 스파스 어레이를 구글에 검색해 보시면 HashMap 하고 비교하는 글도 많아요. 거기서 빠질 수 없는 주제는 성능 비교일 텐데요. 퍼포먼스 이야기는 여기서 굳이 하지 않겠습니다. 이 포스팅을 보신 다음에, 추가적인 질문을 통해서 생각을 해 보도록 합시다. sparse는, 분포된 정도가 적은, 희박한이라는 뜻을 가집니다. 이것이 array의 수식어가 되면 어떨까요? 희소 배열. 즉, 전체에서, 정말 중요한 몇 % 정도만 저장하고 있는 구조 정도로 생각하시면 됩니다. 그런데, 사실 수식어가 걸리는 대상이 더 중요합니다. 여기서, 걸리는..
생활코딩에 arrays.Copyof 메서드에 대한 질문이 올라왔었습니다. 그런 의미에서 이 함수를 간단하게 보도록 하겠습니다. 먼저, 메서드 이름에서 보면 알 수 있다시피, 배열을 복사하는 함수입니다. 배열의 내용을 다른 array로 복사합니다. 여기까지만 짚고, copyOf의 내용을 간략하게 보도록 하겠습니다. 먼저 primitive 타입이 아닌 배열을 copyOf를 할 때에는 3180번째 줄에 있는 친구가 호출이 됩니다. 그러면, 3181번째의 리턴문이 수행이 될 듯 싶네요. 따라 들어가 보겠습니다. 그러면 위 메소드가 수행이 되는데요. 3항 연산자, arraycopy, 리턴문. 이렇게 3개의 문장으로 구성이 되어 있습니다. 이게 어떻게 수행이 되는지 정확히 모르겠으니, main 클래스를 작성해서 디..
최근댓글