분류 전체보기 206

12월 알고리즘 PS 계획 (희망회로)

1~4주차에 정글에서 한 방법이 나랑 잘 맞는것 같아서 비슷한걸 만들어봤다. 5주차 C언어 들어가기 전 수요일에 시간남을때 만든 건데, 연두색은 그새 푼 문제들이다. 코치님은 상중하 난이도를 제시하셨는데, 당연하지만 내가 몰라서 푸는 문제에 난이도를 매길 능력은 없어서 solved.ac 티어를 참고했다. 우측 태그의 개념들은 일단 무슨얘기인지 설명만 훑어봤는데, 이해하는데 필요할 것 같은 양의 문제수를 표에 넣었다. 좀 보면 알것같은 개념들은 조금만 넣고, 개론만 봐도 살짝 빡세보이거나 개념을 알아도 응용력이 필요해보이는 세그먼트트리 같은건 문제를 좀 많이 넣는 식. 이해하고 나면 위의 리스트 외에도 풀 수 있는 문제들이 생길텐데 그쪽도 풀어볼 계획이다. class 6 이상은 구현력은 일단 있다는 전제 ..

PS 공부 기록 2021.12.07

[Red Black Tree] 3. C로 RB Tree 구현

1. 리눅스 C 개발 환경 구성 / RB Tree 이해 2. 파이썬으로 RB Tree 구현 3. C언어 기초 문법 공부 4. 파이썬으로 작성된 RB Tree를 C 코드로 번역 5. C에서 추가적으로 구현해야 할 부분(포인터 사용, 메모리 할당 및 삭제 등) 공부 후 구현 6. testcase 검사 후 에러 부분 보수 C 문법 공부 -> 무지성 통번역 후 실행 -> 에러 고치기 -> 완성 일단 선언, if, while 등의 기초 문법, 함수, 포인터 같은 C의 문법을 공부했다. 그냥 파이썬 코드를 보면서 이건 어떻게 써야할까 싶을때마다 새로 검색하며 공부한 거라 구멍이 많다. 코드를 보면서 안건데 이 긴 코드에 for문이 하나도 없어서 for문은 아직 써본적이 없다 ㅋㅋ 필요해지면 배우면 되겠지... 1 ..

[Red Black Tree] 2. 파이썬으로 RB Tree 구현

1. 리눅스 C 개발 환경 구성 / RB Tree 이해 2. 파이썬으로 RB Tree 구현 3. C언어 기초 문법 공부 4. 파이썬으로 작성된 RB Tree를 C 코드로 번역 5. C에서 추가적으로 구현해야 할 부분(포인터 사용, 메모리 할당 및 삭제 등) 공부 후 구현 6. testcase 검사 후 에러 부분 보수 정글 week05의 docs에 와닿는 글이 있었다. 좋은 성능만큼 개발 및 유지 보수에 비용이 들기 때문에 대부분의 첫 개발은 성능을 포기하고 고급언어로 대충 개발합니다. 그러나, 서비스가 커짐에 따라 대체로 다음과 같은 최적화 과정을 거칩니다. 일단 기계 대수를 늘려서 현재 서비스 수요를 감당 성능에 영향을 주는 주요 부분들, 즉 매우 많이 실행되거나 고성능이 요구되는 부분을 분리 해당 부..

[Red Black Tree] 1. 리눅스 C 개발 환경 구성 / RB Tree 이해

1. 리눅스 C 개발 환경 구성 / RB Tree 이해 2. 파이썬으로 RB Tree 구현 3. C언어 기초 문법 공부 4. 파이썬으로 작성된 RB Tree를 C 코드로 번역 5. C에서 추가적으로 구현해야 할 부분(포인터 사용, 메모리 할당 및 삭제 등) 공부 후 구현 6. testcase 검사 후 에러 부분 보수 Ubuntu 20.04 LTS (x86_64) 환경을 구성하기 위해서 WSL2 가상머신을 이용했다. WSL2를 쓰면 패키지 빌드 중 몇가지 에러가 뜨지만 구글링하면 다 나와서 쉽게 해결 가능하다. AWS EC2를 이용해도 되지만 로컬에서 하는게 취향에 맞는다. github도 팀원과 공유가 필요할 때만 쓰고 코드들은 전부 하드에 정리해두고 있다. 필요한건 전부 손 닿는 위치에 두고싶은 느낌 R..

플래티넘

플래티넘 4주컷 이게 되네... 그냥 아무튼 플래가 찍고싶어서 4주동안 배운걸로 풀 수 있는 문제만 붙잡고 계속 풀다보니 구멍이 많다. 위상, 좌표, 수치해석, 정수론같이 전공빨을 좀 타는 문제는 플래 위로도 잘 풀리는데, 코딩 스킬이 필요한 자료구조나 구현 태그쪽 문제는 골드 5만 돼도 턱 막히고 1시간 이상씩 걸리는 것 같다. 아예 모르는 개념도 많고. 알고리즘 문제는 특정한 알고리즘을 모르면 못푸는 '모르면 맞아야지'식 문제가 많으니 앞으로는 구멍을 메우는 식으로 풀어봐야겠다. 일단 목표는 월마다 1~2티어씩 올려서 정글이 끝날때쯤 다이아를 다는것이다. 코치님도 알고리즘은 꾸준히 풀라 하셨으니 가능한 한 위까지 올라가봐야겠다. 수학과에서 배운걸 본격적으로 쓰는 문제들은 플~다에 있기도 하고, 그쪽을..

PS 공부 기록 2021.12.01

[문자열] 맨버 마이어스 알고리즘

문자열 알고리즘에서 유용하게 쓰이는 suffix array. 사전순으로 정렬된 suffix array를 구하기만 한다면, 그로부터 LCP를 구하여 중복 부분문자열을 쉽게 구할 수 있다. 하지만 접미사들을 사전순으로 정렬하여 suffix array로 만드는 그 시간이, 문자열이 길어질수록 끔찍하게 길어진다. 길이 n자리의 문자열들을 사전순으로 정렬하려면 자리수마다 sort하여 총 n번의 sort가 필요한데, 이걸 길이가 수만 수십만인 문자열에 적용할 수 있을 리가 없다. 때문에 접미사의 특징을 이용하여 n번의 sort 대신, logn번의 sort만으로 사전순 정렬이 가능하게 할 필요가 있다. 맨버 마이어스 알고리즘을 한줄로 요약하면 아래와 같다. '접미사의 정렬에 한해서는 n번의 sort를 하지 않고, 0..