회고
오전 9시 기상. 오전 9시 30분부터 1시간 운동 후 아점을 먹고 씻고 오후 12시에 강의실에 도착했다. 오늘도 어제와 똑같이 그래프 문제를 푸는 날이다. 그래프 이론은 알고리즘이 직관적이고 개념이 어렵지 않은 편이라 공부하기 쉬운 편이다. 그러나 그만큼 시간 제한과 메모리 제한이 빡빡하기 때문에 최적화시키지 않으면 바로 터진다. 로직은 금방 짰는데 시간 제한에 걸려서 어떻게든 줄여보려고 발악하다 2시간을 넘기기도 했다. readline()과 deque는 기본이다.
풀고나서 다른 로직으로 훨씬 빠른 알고리즘을 구현한 것을 보면 대단하면서도 분하고 머리가 아찔해진다. 훨씬 빨리 푸는 로직을 나는 왜 떠올리지 못했을까.. 그래도 다른 로직을 보는 것은 많은 도움이 되니, 더 나은 로직이 없나 찾아보는 습관이 생겼다. 분해도 보는 것이 좋다.
5639번 이진검색트리 문제를 복기하며 최적화를 시도했는데, 아무리 해도 440ms에서 속도가 줄지 않았다. 어떤 동료가 44ms만에 풀어서 어떻게 했는지 따라해보려고 했는데 절대 안 줄더라. deque도 쓰고 재귀 범위도 좁혔는데도. 대체 뭐가 문제인지 1시간을 고민했는데, sys.stdin.readline()
을 안 썼다. 당연히 쓴 줄 알았다. 바로 시간이 50ms까지 줄었다. 로직 문제는 아니었어서 참 다행이다. 이제 readline()은 기본으로 깔고 풀어야겠다.
오후 6시. 집에서 엄마가 보내준 집반찬과 먹을 것들이 도착했다. 이걸로 2주일은 버틸 수 있을 것 같다. 여기와서 어려운 점은 단연 먹을 것이다. 냉장고 자체도 작아서 많이 안 들어가고 돈도 떨어져서 뭘 사먹기도 힘들다. 비싸기도 하고. 집반찬을 받아서 한숨 돌릴 수 있겠다. 4월 29일 저녁에는 집에 갈 계획이다. 이미 표를 끊어놓았다. 오랜만에 가서 가족들이랑 밥 먹고, 우리 강아지랑 산책도 하고 와야지. 들고올 것은 딱히 없는 것 같다. 반팔티? 운동화? 정도.
Python 자체에 대해 공부를 하고싶어졌다. 편리하지만 속도가 매우 느린 파이썬. 이전에 쓰던 C와 너무나 다르다. 왜 그럴까. 궁금해서 검색해보니 많은 사람들이 잘 정리해둔 자료가 있어서 하나하나 훑어보았다. 내일 중으로 정리해봐야겠다.
파이썬 코딩 스타일에 대해서도 관심이 생겼다. 변수를 생성할 때 소문자로 시작할지, 대문자로 시작할지, 두번째 단어의 첫글자를 소문자로 할지, 대문자로 할지, '_'로 구분할지 등등. 코딩 스타일을 하나의 일관된 형태로 가져가야 하는 것은 알고 있지만 여태까지 깊게 생각해본 적은 없었다. 그러나 변수명을 지을때마다 대문자를 쓸 때도 있고, '_'를 쓸 때도 있어서 스타일을 통합할 필요성을 느꼈다. 관련 글은 찾아놓았으니 이것도 내일 중으로 읽고 한 번 정리해야겠다.
오후 7시 30분, 오늘은 저녁을 먹고나서 산책을 다녀왔다. 자전거를 타고 시흥 해안 자전거도로를 따라 30분 정도 달렸다. 선선한 날씨에 하늘이 제법 맑아서 상쾌하다. 미세먼지가 조금 있었지만. 꽤 만족스러워서 앞으로도 종종 산책을 나올 생각이다. 다음엔 자전거를 산 동료들과도 달려봐야지.
TIL
- 파이썬은 왜 이렇게 느릴까? 파이썬은 동적 타이핑 언어이고, 파이썬의 모든 것은 객체로 이루어져 있기 때문이다. 마찬가지로 파이썬의 변수는 객체를 참조할 뿐이라 파이썬은 실행 시 동적으로 변수를 할당하는 과정에서 많은 연산이 필수적으로 수반되므로 실행 속도가 느려진다. 컴파일 언어인 C와 대조된다.
- 파이썬은 캐멀케이스(camelCase), 파스칼케이스(PaskalCase), 스네이크케이스(snake_case)의 3가지 네이밍 컨벤션을 적절히 따른다. 변수인지, 함수인지에 따라 사용하는게 다르다.
- 이전의 알고리즘과 확연히, 그래프 알고리즘 문제는 시간과 메모리 제한이 빡빡하다. 로직 차이가 아니라 사소한 것들 차이로 성공 여부가 갈릴 때가 있다. 노드의 개수와 간선의 개수를 보고 인접 행렬이 나을지, 인접 리스트가 나을지를 생각해야 한다. 또 다익스트라 알고리즘이나 크루스칼 알고리즘을 적절하게 사용해야 한다.
'크래프톤 정글 2기' 카테고리의 다른 글
[크래프톤 정글 2기] Day 22 (0) | 2023.05.14 |
---|---|
[크래프톤 정글 2기] Day 21 (0) | 2023.05.14 |
[크래프톤 정글 2기] Day 19 (0) | 2023.05.13 |
[크래프톤 정글 2기] Day 18 (0) | 2023.05.13 |
[크래프톤 정글 2기] Day 17 (0) | 2023.05.13 |