크래프톤 정글 2기
[크래프톤 정글 2기] Day 8
KimCookieYa
2023. 5. 11. 22:14
회고
2023-04-10
한솥을 자주 시켜먹는다. 요즘같은 고물가 시대에 싸고 양 많고 맛있다. 한솥은 완벽하다.
오늘도 하루종일 알고리즘 공부했다. 11시 출석, 12시 점심, 18시 저녁, 24시 종료. 하루종일 앉아서 백준만 풀면서 알고리즘 공부만 하려니 지겹다..
TIL
list의 append()와 +연산 성능 비교
- List Concatnation
- 리스트 객체는 변경가능 객체
- int형, tuple형, str형 객체는 변경 불가능(immuatble) 객체
- 리스트의 append() 메소드는 객체의 내용을 변경시킴
- 리스트의 + 연산은 객체로 복사해서 다시 바인딩(리바인딩) 함
- 리바인딩은 시간이 많이 걸린다
- 리스트 객체의 append()는 상대적으로 빨리 수행된다
추가
a = []
app = a.append
for i in range(5):
app(i)
a.append()는 라이브러리에서 호출하기 때문에 루프 밖에서 미리 호출하는 것이 조금 더 빠르다고 한다.
- 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시간 정도 들었다. 문법 정리하는건 별 의미없을 것 같으니 그냥 듣기만 한다. 빨리 리액트 네이티브 배우고 싶네.