study


  • [우아한테크코스] 프리코스 1주 차: 숫자야구 회고

    우테코 프리코스 과정이 시작됐고, 첫 미션이 공개됐다. 1주차 미션은 숫자야구 게임. 어릴적에 시골 가는 기차에서 가족끼리 종이 한 장과 펜 하나면 즐길 수 있는 간단한 게임이었다. 하지만 막상 이걸 구현하라고 하니 어디부터..? 라는 생각부터 들었다 😂 우리가 알고 있는 숫자야구 게임을 코드로 적어야 한다. 랜덤하게 세 자리 수를 고르는 것부터, 스트라이크/볼 판정 등 구현해야 할 게 많았다. 사실 구현할 게 많았다는 말보다, 모두 구현해야 한다는 말이 정확한 것 같다. 해당⋯


  • [우아한테크코스] 지원, 프리코스 안내

    작년 이맘때쯤에도 우테코 5기 지원이 한창이었다. 그때도 지원에 대한 많은 고민을 했고, 학교 공부를 지속해나가는 것이 더 재미있어서 1년간 학교를 더 다녔다. 그 와중에 우테코 5기분들이 올려준 테코톡이나 블로그 글이 흥미로워 읽어보기도 하고, 다양한 시각을 접할 수 있었던 터라 다음 기수에 대한 욕심을 키워나갔다. 올해에도 어김없이 우테코 모집공고가 발표됐다. 시간은 흘러 어느새 6기 모집이 되었고, 올해에는 도전해보려고 한다. 지원접수 기간과 프리코스 기간이 중간고사와 겹쳐있어서 꽤나 신경쓰였다. 자기소개서에는 최대한 나의 경험과⋯


  • Longest Increasing Subsequence (LIS)를 NlogN에 구하기

    최장 증가 수열이라고 불리는 Longest Increasing Subsequence (LIS)라는 문제는 간단하지만 강력한 문제 중 하나이다. 이 문제는 다이나믹 프로그래밍을 활용한 $O(N^2)$ 풀이와 이분 탐색을 활용한 $O(NlogN)$ 풀이가 잘 알려져 있는데, 이분 탐색을 활용한 풀이가 어떻게 최적화되었는지에 대한 설명을 이 글에서 적고자 한다. Naive solution: Bruteforcing 간단하게 생각해보자. 모든 부분 수열에서 오름차순을 이루는지 확인해보면 된다. 모든 원소가 부분 수열에 속하거나 속하지 않는 두 가지 상태를 가진다. 길이 $N$의 수열이라면 $2^N-1$개의 부분 수열이⋯


  • JPA @Query에서 비트 연산자 (Bitwise AND) 사용하기, 트러블슈팅

    TL;DR @Query 어노테이션이 붙은 친구들은 HQL/JPQL로 작성한다. Hibernate 6.0.0 버전부터 $\texttt{BITAND}$ 함수가 추가돼 이를 사용할 수 있다. 단, $\texttt{BITAND}$ 내부에 우리가 함수 인자로 던져주는 값이 들어있다면, 해당 값을 아래와 같이 적절히 캐스팅해 주어야 한다. 비트 연산 교내에서 진행했던 해커톤에서 비트 연산한 값을 기준으로 데이터베이스에 쿼리를 보내야 할 일이 생겼다. 간단한 요리 레시피들을 필터검색할 때, 특정 조리도구들을 포함한 레시피들을 알아내야 했다. 조리도구의 양이 많지 않았어서 조리도구 하나하나를 비트로 하는 $\texttt{long}$ 타입의⋯


  • UCPC 2023 본선 후기

    예선은 참가자로, 본선은 스태프로 대회를 보낸 사람이 얼마나 있을까? 예선에서 6솔로 아쉽게 탈락한 우리 팀을 뒤로하고, 본선에 진출(?)하게 된 기록을 남긴다! 예선 탈락자가 본선 대회에 등장하게 된 이유 대회 본선은 7월 22일(토)에 진행될 예정이었다. 그보다 이틀 앞선 20일에 UCPC 동아리 디스코드에 하나의 공지가 올라왔다. 정말 놀랍게도 이 시간에 깨어 있었다… 디스코드 알림도 원래 자주 확인하는 편이 아닌데도 확인했다… 확인하자마자 함께하고 싶다고 말씀드렸고, 정말 뒤늦게 스태프로 함께하게 되었다. 함께하게 돼서 정말⋯


  • 알고리즘에서의 해시 함수

    해싱이라는 건 알고리즘 문제풀이를 해 봤다면 한 번쯤은 들어 보았을 분류이다. 주로 파이썬의 dict, C++의 unordered_set 등이 해싱을 사용해서 구현되었다. 삼성 동계 DX 알고리즘 특강을 들을 때, 해싱을 직접 구현해서 문제를 풀어야 하는 일이 있었다. 해시 함수를 직접 만든 뒤에, 해시가 가지는 시간상의 이점을 활용해서 문제를 해결한다. 그때 당시에는 문제를 푸는 데 꽤나 고생했다. 시간이 조금 지나서 다시 공부해보고 기록한다. 정리한 글에 오류가 있을 수 있습니다. 댓글로 남겨주시면 반영하겠습니다.방문해주셔서 고맙습니다⋯


  • UCPC 2023 예선 후기

    작년에 이어서 올해에도 UCPC에 참가했다. 작년에는 @kth990303, @riroan과 함께 했었다. 올해에도 그 팀을 기대했지만 @kth990303은 바빠서 참석이 어려웠고 @riroan 형은 졸업해버리는 바람에(…) 참가할 수 없었다. 작년 ICPC를 진행하면서 알게 된 @delena0702와는 함께하기로 이야기가 되어 있었다. 접수 마감이 다가오면서 다른 사람을 찾기 시작했고, 몇 명을 컨택해보기도 했지만 이미 팀원이 있었다. 아쉽기도 했지만 올해 동아리를 운영하면서 생기는 선순환이었다. 교내에 많은 사람들이 알고리즘에 관심을 가져줘서 더 즐겁게 할 수 있을 것 같았다. 이곳저곳⋯


  • Typst로 문서를 만들어 보자!

    지금까지는 문서를 만들 일이 있을 때 PPT나 Word를 사용했었는데, 최근에 Typst를 알게 돼서 이를 기반으로 동아리 모의대회 해설을 만들어 보았다. 문법을 익히기도 쉬웠고, 바로바로 변동사항이 미리보기에 반영돼서 매력적이었다.  아직 사용해보지 않았지만, 동시에 여러 명이 문서를 편집할 수 있다는 점도 굉장히 편리한 기능 중 하나. 연말에 진행할 교내 대회 해설도 Typst를 사용해서 만들어볼만 할 것 같다. 레퍼런스에 문법과 관련된 사항이 자세하게 설명돼 있다. 익힌 것들을 기록해두고자 글을 씁니다. 다소 글이 복잡하더라도 양해 바랍니다 🙌🏻 최초에⋯


  • Minimum Spanning Tree 알고리즘의 증명

    MST를 알고 있고, 크루스칼과 프림을 알고 있지만 그냥 쓰고있지 않은가? 이 글을 통해서 “왜 돼?” 에 대한 해답을 찾을 수 있었으면 좋겠다. 그래프가 주어졌을 때, 모든 노드를 연결하는 트리를 Spanning Tree라고 하고, 이 중에서 가장 간선의 가중치의 합이 낮은 트리를 Minimum spanning tree(이하 MST)라고 한다. MST를 만드는 방법으로는 Prim, Kruskal 알고리즘으로 두 가지가 있으며, 각각 $O(ElogV), O(ElogE)$ 가 소요된다. (그래프가 dense할 수록 $E$ 는 $V^2$ 에 가까워지며, $O(ElogE) = O(ElogV^2)⋯


  • 수학적 귀납법을 사용해 재귀를 증명하기

    0. 글을 쓰는 이유와 잡다한 이야기 이번 학기에는 <알고리즘>이라는 과목을 수강한다. 나는 알고리즘을 통한 문제해결(Problem Solving)에 관심이 많아서 혼자 여러 알고리즘들을 공부해왔다. 군대를 다녀오기 전, 새내기 시절에는 동아리 내에서 알고리즘 대회를 열어 문제를 출제하기도 했었다. 코로나의 여파가 가시질 않아 이번 학기도 대부분의 과목들이 비대면으로 진행했고, 알고리즘 또한 그랬다. 1주차 강의밖에 듣지 않았지만, 느낀 게 꽤나 많다. 나의 알고리즘 공부법이 완벽하게 틀렸다고 할 수 있을 정도였다. 여러 알고리즘 유형의 문제들을 풀어왔지만, 문제에⋯


Categories