크래프톤 정글 2기

[크래프톤 정글 2기] Day 8

KimCookieYa 2023. 5. 11. 22:14

회고


2023-04-10


한솥을 자주 시켜먹는다. 요즘같은 고물가 시대에 싸고 양 많고 맛있다. 한솥은 완벽하다.

오늘도 하루종일 알고리즘 공부했다. 11시 출석, 12시 점심, 18시 저녁, 24시 종료. 하루종일 앉아서 백준만 풀면서 알고리즘 공부만 하려니 지겹다..

TIL


list의 append()와 +연산 성능 비교

append()와 +연산 성능 비교

  1. List Concatnation

    • 리스트 객체는 변경가능 객체

  • int형, tuple형, str형 객체는 변경 불가능(immuatble) 객체
  • 리스트의 append() 메소드는 객체의 내용을 변경시킴
  • 리스트의 + 연산은 객체로 복사해서 다시 바인딩(리바인딩) 함
  • 리바인딩은 시간이 많이 걸린다
  • 리스트 객체의 append()는 상대적으로 빨리 수행된다

추가

a = []
app = a.append

for i in range(5):
    app(i)

a.append()는 라이브러리에서 호출하기 때문에 루프 밖에서 미리 호출하는 것이 조금 더 빠르다고 한다.

  1. List Append
    리스트 성능 향상 트릭
    그러나 단순 요소 추가에선 a.append()는 느리다. 요소를 추가할 때마다 메모리 재할당이 이루어지기 때문. list comprehension이나 map()을 쓰는 것이 속도가 빠르다고 한다.

정리

  • 리바인딩은 시간이 많이 소요
  • 그래서 성능이 좋지 않음
  • 파이썬은 느리다고 불평하는 경우가 이 경우
  • 하지만 numpy를 사용하면 C와 비슷한 속도를 얻을 수 있다.
  • +연산 말고 append() 쓰자.

N-Queen

1년 전에 C++로 풀었던 N-Queen이다. 백트래킹과 재귀의 대표적인 백준 문제. Python으로 문제를 풀고보니 예전에 풀었던 방식과 똑같이 풀어버렸다. 그런데 C++ 로직을 그대로 Python으로 옮긴 코드는 시간 초과가 난다. 언어설정을 PyPy3로 바꾸니 통과했다.. Python은 역시 느려터졌다.

동료들의 얘기를 들어보니 파이썬 교재의 8-Queen 알고리즘을 적용하면 문제없이 풀 수 있다고 한다. 8-Queen 알고리즘 로직은 생각도 못해본 방식이다. 어떻게 하는거냐..

파이썬 코드 스타일

[파이썬 코드 스타일]에 관한 좋은 문서를 발견했다. 내일 중으로 제대로 읽어봐야겠다.

리액트

알고리즘만 하기엔 좀이 쑤셔서 니꼬 강의를 1시간 정도 들었다. 문법 정리하는건 별 의미없을 것 같으니 그냥 듣기만 한다. 빨리 리액트 네이티브 배우고 싶네.

참고