오늘 한 내용
- LeetCode 3731
- Codeforces 580c
- 블로그 레이아웃, 숏코드, 콘텐츠, 스크립트, 기능 정리
ps
Codeforces 580c가 그래프(트리)를 순회하는 문제였는데, 각 노드의 값이 0 혹은 1이라서 bool 타입 벡터를 사용하고 입력을 받으려 했다.
vector<bool> a(n);
for (bool& ai: a) {
std::cin >> ai;
}아무런 이상이 없는 코드라고 생각했지만, 컴파일 에러가 생겼다. 이유를 조금 찾아보고 정리를 했는데 다음과 같다.
bool타입을 원소로 가지는 벡터는 다른 벡터들과 다르게 각 원소를 1비트 단위로 압축해서 저장한다. (ex:1010101...)- 압축되어 저장되었기 때문에(그냥 비트에 녹아버렸으니까) 다른 타입의 벡터와 서브스크립트 접근 방식이 달라야 한다.
- 이를 해결하기 위해서 프록시 객체가 존재한다.
a[3] = true;->a.operator[](3).operator=(true); - 만약
bool&을 통해 레퍼런스를 뽑아내려 하면, 프록시 객체 자체가 리턴된다. - 결론적으로
vector<bool>에선 위의 코드같은 문법을 못 쓴다…
위와 같은 경우가 아니더라도, 굳이 bool 타입 벡터를 쓸 필요도 없는게, 프록시 객체가 원소를 뽑아오는 것도 다른 벡터보다 더 많은 계산 시간이 필요하다. 그래서 그냥 int 벡터로 문제를 풀었다.
블로그
일단 글들의 태그도 정리했고, WWDC관련 글들을 같은 카테고리로 묶었다. 아마 블로그를 처음 만든 날 다음으로 큰 변화가 있었다.
테마
katex 수식의 렌더링 사이즈가 본문 글과 잘 어울리지 않는다고 생각해서 1.21rem에서 1rem으로 축소했다.


코드블록의 폰트를 IBM-Plex-Mono로 바꿨다.
Mono가 뭔지 궁금해서 찾아봤는데 MonoSpace, 각 문자들의 간격이 일정한 것을 말한다고 한다. Noto는 무슨 뜻인지 알았는데…
태그 칩
TIL과 PS 관련 글들을 Posts가 아닌 별개로 분류했다. PS 문제만 모아져 있는 메뉴 섹션에서는 상단에 Tag 칩들을 보이게 하고 싶었다.

문제가 딱 하나 있었는데 저 태그를 누르면 PS 글이 아닌 글들도 보이게 된다. (당연히 선택한 태그는 가져야 하지만)
Hugo는 정적 블로그라서 HTML을 미리 만들어놓고 뿌리기만 하니까, /ps/tag=bfs 이런 스타일의 쿼리가 불가능하다. 어떻게 해결해야할까 고민을 하다가 두 가지 해결 방안을 떠올렸는데 다음과 같다.
- PS글 전용 태그 리스트를 만들기 ps-DFS, ps-GCD, ps-DP… 칩에서는 앞에 접두어만 떼서 보여주면 된다.
- PS글 전용 프론트 포매터 태그를 만들기
두 번째 방법을 선택했는데, 첫 번째 방법이 나빠서가 아니라, 그냥 ps- 이런식으로 붙이는게 좀 더 거부감이 강했다. 지금은 칩을 누르면 PS글만 잘 필터링 되어서 보인다.
스크립트
노션, Apple Developer, VSC, Xcode, 다양한 사이트 등등에서 코드를 가져오는 경우가 많다 보니, 들여쓰기들이 전반적으로 엉망인 것들이 많았다. 탭인가 스페이스인가? 4칸인가 2칸인가. 그리고 자동 변환으로 인한 문제들이 많이 겹쳐 있었다.
그래서 TS, JS는 2칸 나머지는 4칸이라는 기준을 세우고 스크립트를 작성했다.