빗물 트래핑
Q. 높이를 입력받아, 비가 온 후 얼마나 많은 물이 쌓일 수 있는지 계산하라. ex) [3, 0, 1] -> 1 , [1, 4, 1, 5] -> 3 1. 투 포인터 활용 두 개의 포인터를 리스트의 맨 왼쪽, 오른쪽에서 각각 중앙을 향해 출발시킨다. 양쪽의 왼쪽에서 가장 높은 값, 오른쪽에서 가장 높은 값 중에서 더 작은 쪽을 큰 쪽을 향해 이동시킨다 (left_max가 3이고 right_max가 5인 경우 left가 우측으로 1칸 이동) 이때 왼쪽을 예로 들자면, 왼쪽부터 우측으로 이동하며 높이가 낮아지는 경우 낮아진 만큼을 결과값에 합산하고, 높이가 높아지는 경우에는 해당 인덱스를 left_max로 갱신한다. (오른쪽도 방향만 반대일 뿐 동일하다) 위의 과정을 반복하면, 결국 left와 right가 ..
2021. 2. 11.
함수에서의 리스트 수정..?
어제 몇 시간을 아래 코드 가지고 씨름하고 있었다...;; 결국 함수에서의 인자 전달 과정에 대해 여러 번 다시 찾아보았고, 배운 것이 많았다 ㅠㅠ def foo(input : list) -> None: input = [0] bar = [1,2,3] foo(bar) print(bar) # [1,2,3] (왜 [0]이 아니지? 라고 생각하셨다면, 처음의 저와 같은 생각을 하신 겁니다..ㅎ) 결론부터 이야기하자면, 위의 함수는 리스트를 수정하는 것이 아니라 재할당하는 것이다. 즉, 리스트를 수정하는 경우와 재할당하는 것은 다르다. 그러니까, 아래의 코드는 우리가 생각하는 대로 동작한다. def foo(input : list) -> None: input[-1] = 0 bar = [1,2,3] foo(bar) ..
2021. 2. 7.