보통 .pop()을 쓸 때, 리스트 이름 뒤에 .pop()을 붙여서 마지막 element를 빼냈던 것 같다. 그런데 어떤 변수에다가 stack.pop() 값을 할당해줄 수 있다. 코드를 보자. 여기 보면 기준점이 되는 index를 stack.pop()으로 할당해주었다. a = stack.pop()으로 할당해주면 마지막 element의 인덱스를 가져올 수 있다. 그리고 결과를 효율적으로 저장해주는 방법인데, 코드를 보면 result를 저장할 때에 result = [0] * len(prices)로, 단순히 빈 배열인 result = [] 를 하기보다애초에 0이 각 위치에 들어가있는 상태로 초기화를 시킨다. 이렇게 저장하면 따로 위치를 관리해줄 필요 없이 result 자체에 인덱스로 접근할 수 있다.re..
오늘은, 처음의 index값을 보존할 수 있는 방법을 알아보겠습니다. 처음 index값을 보존하려면, enumerate로 아예 인덱스값이 포함된 tuple로 만들어주면 됩니다. process = deque((i, order) for i, order in enumerate(priorities)) 이런 식으로 기존 priorities의 인덱스를 i로 보존하면서 새로운 큐인 process를 만들 수 있습니다.그리고 tuple의 element는 elem[0] 이런 식으로 접근하면 됩니다.
오늘은 while문의 조건의 순서에 대해서 알아보려고 한다. 알다시피 파이썬은 왼쪽에서 오른쪽으로 코드가 읽히는데, 여기서 and 로 동일 조건임을 명시해도 먼저 써야하는 조건이 있다. 주로 리스트나 큐와 같은 배열을 순회할 때, 옆에꺼 접근하고 이러다보면 항상 list index out of range 에러를 마주치게 된다. 항상 리스트 길이 조건이 충족되었는지 조건을 먼저 작성해줘야한다. (Rule of Thumb) 코드를 보면,
오늘은 sort()와 sorted() 차이가 뭔지 적어보려고 한다. 1. sort()는 원 배열을 수정한다.2. sorted()는 원 배열을 수정하지 않고 modify된 새 배열을 리턴한다. 그러므로 sorted()가 Space Complexity를 좀 더 잡아먹을 것이다.
이번에는 python의 조건이 있는 sort()에 대해서 알아보고, tuple이 쭉 있을 때 [ (1, a), (2, b) ] 앞에 숫자에 대해서 sort 한 번, 뒤의 글자에 대해서 sort 한 번 식의 다중 sort(),그리고 이걸 lambda로 구현, 하는 걸 다뤄보자. 결론부터 보면,.sort(key = lambda x: (-x[1], x[0])) 1. key = sort의 기준! 2. 익명 함수인 lambda x 를 사용해주었다. lambda x : x[0] 을 하면 x의 0th element를 기준으로 "오름차순" 으로 정렬해준다. 3. (-x[1], x[0]) 에서 -는 내림차순, 냅두면 오름차순이며, -x[1]을 먼저 써주는 이유는 이거를 기준으로 먼저 정렬하고, 그 상태에서 ..
element가 2개 있을 때, 하나를 씹어버리고 나머지 하나에 대해서만 sum 연산이라던지, 이를 조작할 수 있는 코드가 있어서 기억을 위해 포스팅하고자 한다. 프로그래머스의 Hash - 베스트앨범 문제이다. 우선 이전 포스팅으로 여러 tuple을 value로 가지고 있는 dict()를 생성해 주었고, 위처럼 생겼다. tuple의 2번째 element가 재생 횟수인데, 가장 재생이 많이 된 장르를 찾고자 한다. 이럴 때, value들을 for 문으로 순회해주는데, 원래는 element가 2개니까 for index, play in dict[genre]: ~~~ 이런 식으로 접근해야 한다. 하지만, sum(play for _, play in dict[genre])이렇게 _를 사용하고 ..
오늘도,, 저번 포스팅의 연장선인데, 딕셔너리에서 하나의 key에 여러 값 추가하기이다. 저번에는 하나의 key에 여러 value들을 리스트로 추가해줬다. key : [val1, val2, val3] 이런 식으로다. 그런데 이제는 하나의 key에 여러 value들을 tuple로도 추가해줄 수 있다는 사실을 깨달았다. 이번에 문제를 풀면서 도대체 index를 어떻게 같이 관리해야 하나 싶었는데, tuple로 인덱스값도 같이 저장해줄 수 있다. 처음에 추가할 때는 [(i, value)] 이렇게 추가해주고, 나중에는 .append([i, value2]) 이런 식이다. 결과는 이렇게 된다: key : [(0, val1), (1, val2), (2, val3)] 이렇게 하면 인덱스까지 관리가 된다. 문제와 ..
zip()을 쓰는 사람들이 멋있어 보이고 간편해 보였다. 찾아보니 zip()은 여러 리스트의 동일한 위치에 있는 애들을 묶어서 도는 것 같다. 어차피 아마 element들 만 빼내는 용도로 쓸 것 같다. 예시 코드를 그냥 한 번 쳐보자. list1 = [a, b, c]list2 = [1, 2, 3] for char, num in zip(list1, list2): -- 이런 식으로 a와 1, b와 2, --- -- 이런 요소들에 접근할 수 있다. ---
오늘도 역시.."If you have a problem, just throw a hashmap" 오늘은 해시맵 key 하나에 여러 value들을 assign 하는 방법이다. 바로 애초에 하나를 추가할 때 list로 추가해주고, 이미 value가 있으면 list에 .append() 해주는게 방법이다. 코드로 보자. 오늘은 LeetCode가 아닌 프로그래머스에서 가져왔다. 저렇게 뭐가 리스트로 주욱 왔는데, 카테고리 별로 아이템이 있으니,문제 설명 부분의 표처럼 해시맵으로 정리하고자 했다. 없으면 추가해줄 때 [cloth] 이렇게 리스트로 감싸주고 추가해주면 된다.이렇게 안하면 추후에 append가 안되기 때문에 대괄호로 감싸줘야한다. 여기서는 string이 들어가는데, list(cloth)..
Two-pointer technique에 있는 문제인데, sliding window라는 방법론으로 풀 수 있다고 하여 다뤄보고자 한다. CNN 필터가 슥슥 지나가는 것처럼 window의 길이를 다루고, 이를 한 칸씩 옆으로 옮겨보는 방법으로 subarray들을 체크할 수 있다. i와 j를 같이 돌릴건데, ij 같이 있다가 i, j / i,,j / i,,,j / i,,,,,j 이런 식으로 j를 늘려가면서 체크하고,nums[i]를 빼주고 i 인덱스를 증가시켜준다. 코드를 주석과 함께 보자. 시간복잡도가 while이 2개 들어가서 별 고민없이 O(n^2)인 줄 알았으나, subarray 체크하는 부분에서 늘어나는거만큼 우리가 왼쪽의 i에서도 줄여주기 때문에, O(n)이라고 한다.공간복잡도는 scalar v..