20210614

6279 단어 TILTIL

오늘 한 일


목표

BFS, 다익스트라

아샬님 아침 질문 & 강의

  • 해시 테이블의 정체는 뭔가?
  • 자료구조를 만들면 하는 일 - 순회와 탐색
  • 이진탐색을 그냥 할 수도 있고 자료구조로 만들어서 넣어놓을 수 있는데 넣어놓는 것을 이진탐색트리라고 한다.
  • 시간 복잡도는 - n x n , n x log(n) => 이거 두개가 이렇게 되는 이유는 후자를 트리의 구조로 생각하면 편하다. 트리가 굉장히 비효율적으로 나누어지면, 링크드리스트와 똑같아지고, 탐색에 걸리는 시간복잡도가 n 이 된다. 트리를 효율적으로 나누면, 탐색에 걸리는 시간복잡도가 log(n)이 된다.

코딩도장

  • 시간제한을 두고 문제를 풀었다. 크레인 인형뽑기
  • 시간 제한을 두니 구현이 엉망이 되었다.
    - 파이썬 배열에서 하나의 열을 선택하기
    • 하나의 1 차원 배열에서 처음으로 0 이 아닌 것이 나오는 위치
  • 시간이 제한된 상태에서도 엘레강트한 방법을 쓸수 있어야 한다.
  • 그러려면 단순히 풀이개선뿐만 아니라, 반복풀이를 통해서 학습할 수 있어야 한다.

개선할점

  • 같은 문제를 여러가지 언어, 여러가지 방법으로 풀어봐야 한다.
  • 같은 문제를 꼭! 반복해서 풀어봐야 한다.
  • 파이썬 배열에서 열 하나를 선택하는 방법을 학습하자.
  • 인형을 넣을때 스택을 사용해서 넣기 함수를 구현 했는데, 따로 테스트 할때 왜 상태와 관련된 문제가 발생했는지를 파악하자. 상태를 주고 새 상태를 결과와 함께 돌려주도록 했었다.
  • 인형을 넣는 함수의 인터페이스를 개선하자. true false 는 쫌...

잘한 것

  • 잘 안될때 빠르게 접근방법을 찾아보았다. -> 모른다는 사실을 빠르게 인정하고 필요한 피드백을 받았다.
  • 풀이상황을 적어서 무엇에 문제가 생겼는지 원인을 정확히 할 수 있었다 - 깊이가 1씩 증가하도록 탐색하는 방법

부족했던 것

  • 문제를 풀 시간을 정확히 설정하지 않았다. 피드백이 필요한 시간을 설정하고 딱 그만큼만 해결에 투자하면 더 효율적일 것이다.

python

배열에서 하나의 열 선택

2 번째 열을 선택하고 싶다면, 다음과 같이 list comprehension 을 적용할 수 있다.

column2 = [r[1] for r in array]

다음과 같이 매핑을 하는 것도 가능하다. 하지만 가독성이 안좋다.

list(map(lambda x: x[1], arr))

일차원 배열에서 임의의 predicate 를 만족하는 첫번째 원소를 찾기

예를들어, 다음배열에서 0 이 아닌, 원소를 찾고자 한다면,
next 함수와 제너레이터를 활용할 수 있다.

array = [0, 0, 0, 1, 2]
find_not_zero = next(x for x in array if x != 0)

인덱스를 찾고자한다면 다음과 같이 할 수 있다.

find_not_zero = next(i for x, i in enumerate(array) if x != 0)

next 는 generater 를 인수로 받는 연산으로, generator 에서 나오는 다음값을 반환한다. 특정한 자료를 소비하는 generator 를 정의하고, next 연산을 수행하면, 해당 원소는 자료에서 소모된다.

좋은 웹페이지 즐겨찾기