오늘 한 내용
배운 내용
C++ 배열 vs 벡터
Codeforces에서는 C++로만 코드를 작성하는데, 최근에는 벡터보다 C 스타일 배열을 선호했다. 그런데 오늘 T-Primes 문제를 풀면서 다시 벡터를 쓸까 고민했다.
가장 큰 이유는 보일러플레이트 때문이다. push_back 같은 벡터에서 편리한, 다른 언어에서는 당연히 있는 메소드가 배열에 없다. 결국 추가 코드를 작성하고 어느정도의 비효율이 생긴다. 그 외에도 배열은 함수에 넘길 때 크기를 같이 넘겨줘야 하는 번거로움이 있다. 글로벌 변수를 선호하지 않아서 레퍼런스를 파라미터로 와르르 넘기는 스타일을 쓰는데, 배열이면 크기도 같이 들고 다녀야 한다.
오늘은 원소가 100만 개인 배열을 써야 해서 스택 오버플로우를 피하려고 동적 할당을 했다. 벡터를 썼다면 고민할 필요가 없었을 것이다. C 배열 특유의 포인터를 쓴다는 손맛이 있지만…
endl vs "\n"
endl은 출력 후 버퍼를 강제로 비우는 flush()를 강제 호출하고, "\n"은 그렇지 않다. 나는 항상 endl을 선호해왔는데, 사실 PS에서는 "\n"이 더 빠르고 실질적인 차이가 없다.
PS 코드를 프로덕션처럼 짤 필요가 있을까?
PS 코드에서 using namespace std를 안 쓰는 것도, endl만을 고집하는 것도 생각해보면 꽤 이상한 고집일 수도 있다. 유연하게 생각하고 효율적인 코드를 작성해보자.
내일 할 것
블로그 아키타입, 숏 코드, 스크립트들이 난잡하다. 한번 구조화를 하고 공통된 부분을 뽑아내야 할 것 같다. 파일 불러오기 같은건 공통 스크립트로 사용할 수 있을 것 같다.
git hook이 커밋된 이후에 적용되어서 별개의 커밋을 생성해야하는 문제가 있다. 매번 amend를 하는 것도 번거로우니 git hook에 대해서 더 공부하고 커밋을 실패시키든지 해야할 것 같다. 일종의 로컬 CI로 쓰려고 한다.
WWDC 시청을 Swift Concurrency 위주로 가져갈 생각이다. 아직 SwiftUI에서 흥미로워 보이는 주제를 다 보지는 못했지만, Swift Concurrency와 같이 보면 더 좋을 것 같다.