전체 글

안녕하세요. 사진과 철학에 관심이 많은 웹 프론트엔드 개발자 오원종입니다. 시간이 지나도 꾸준히 읽힐 수 있는 글을 쓰고 싶습니다. 재미있는 일만 하면서 살고 있는 사람입니다.
최근에 Typescript로 BST를 직접 구현해 보라는 질문을 받았는데 제대로 구현하지 못했다. 그래서 중요한 개념을 복습할 겸 하나씩 정리해 보고자 한다. with Codex이 글은 정수 값만 저장하는 Binary Search Tree(BST) 를 TreeNode, BinarySearchTree 두 클래스로 직접 구현하는 흐름을 정리한 노트입니다. 먼저 의사코드로 생각을 고정하고, 그 다음 그림으로 포인터 이동을 확인한 뒤, 마지막에 TypeScript 코드로 옮깁니다.이 구현의 규칙은 네 가지입니다.value는 정수만 허용합니다.한 노드의 왼쪽 서브트리에는 더 작은 값만 둡니다.한 노드의 오른쪽 서브트리에는 더 큰 값만 둡니다.중복 값은 삽입하지 않고 false를 반환합니다.1. BST 규칙부터 잡..
26.07.06 ~ 26.07.10나의 필요에 의한 스킬을 처음 만들어 보았다나는 지금까지 누군가가 만든 스킬을 사용하는 것에 익숙했는데, 최근에 처음으로 내가 필요에 의해서 반복되는 작업을 스킬로 만든 사례가 있었다.나는 뱅크샐러드에서 가계부 관리를 한다. 뱅크샐러드와 내 모든 은행과, 카드를 연동하면 실시간으로 나의 자산 내역과 지출, 수입 내역을 관리할 수 있어서 편리하게 잘 쓰고 있다. 뱅크샐러드에서 이 모든 자산 관련 내용을 엑셀 파일로 추출할 수 있는데, 한 달에 한 번씩 내가 수동으로 하고 있던 재무관리를 AI 스킬을 만들어서 하게 해 보았다.뱅크 샐러드 앱에서 파일 추출 후 Codex에 파일 업로드까지만 내가 하고 내가 만든 재무분석 스킬을 돌리면 AI가 알아서,나의 현재 자산 현황 (현금..
이 문제를 풀기 위해서는 비트마스크 DP에 대해서 알아야 한다.배열의 길이가 최대 16이기 때문에, 각 원소를 썼는지 안 썼는지를 하나의 비트마스크로 표현할 수 있다. 그리고 어떤 원소들을 이미 사용했는지 알 수 있으면, 지금 만들고 있는 부분집합의 합이 목표값에서 어디까지 차 있는지도 계산할 수 있다.0. 필요한 개념 먼저 정리하기먼저 이 문제의 목표는 k개의 부분집합을 만드는 것이다. 모든 부분집합의 합이 같아야 하므로, 전체 합을 k로 나눈 값이 각 부분집합의 목표 합이 된다.예를 들어 nums = [4,3,2,3,5,2,1], k = 4라면 전체 합은 20이고 각 부분집합의 목표 합은 5다. 따라서 (5), (4,1), (3,2), (3,2)처럼 모든 그룹이 합 5로 끝나야 한다.여기서 중요한 전..
이 문제를 풀기 위해서는 비트마스크 DP에 대해서 알아야 한다.비트마스크는 여러 개의 참/거짓 상태를 하나의 정수로 압축하는 방법이다. 이 문제에서는 필요한 스킬의 개수가 최대 16개이므로, 각 스킬을 비트 하나에 대응시키면 어떤 팀이 가진 스킬 조합을 숫자 하나로 표현할 수 있다. 그리고 그 숫자를 DP의 상태로 쓰면, "이 스킬 조합을 만들 수 있는 가장 작은 팀"을 차근차근 갱신할 수 있다.0. 필요한 개념 먼저 정리하기먼저 비트마스크부터 보자. 예를 들어 필요한 스킬이 ["java", "nodejs", "reactjs"]라면 다음처럼 위치를 정할 수 있다.java -> 0번 비트nodejs -> 1번 비트reactjs -> 2번 비트그러면 ["nodejs", "reactjs"]를 가진 사람은 11..
이 문제를 풀기 위해서는 이분 그래프 최대 매칭(Bipartite Matching), 그중에서도 Kuhn Algorithm에 대해서 알아야 한다.Kuhn Algorithm은 이분 그래프에서 매칭의 수를 하나씩 늘려 가는 알고리즘이다. 핵심은 단순히 "빈 자리를 찾는다"가 아니라, 이미 누군가 차지한 자리라도 기존 매칭을 다른 곳으로 옮길 수 있다면 전체 매칭 수를 늘릴 수 있다는 점이다.이 문제에서 남학생과 여학생은 자연스럽게 두 그룹으로 나뉜다.왼쪽 그룹: 남학생오른쪽 그룹: 여학생grid[i][j] === 1: i번 남학생이 j번 여학생을 초대할 수 있음따라서 문제는 "가능한 초대 관계들 중 서로 겹치지 않게 최대 몇 쌍을 만들 수 있는가?"로 바뀐다.1. 접근 : 문제를 단순화 하기문제에서는 m x..
26.06.29 ~ 26.07.03너무 열심히 살게 만드는 나라이번 한 주 몸이 안 좋다 보니 부정적인 생각들이 많이 생겼다. 열심히 사는 삶이 가지는 부작용에 대해 한 주간 생각해 보게 되었다. 어렸을 때부터 나는 뭐든지 열심히 하라는 말을 참 많이 들으며 자라 왔다. 그러다 보니 그게 맞다고 믿었고, 실제로 그런 나를 좋게 인정해 주는 사람도 주변에 많았던 것 같다. 하지만 요즘 나는 내가 열심히 살아온 삶이 너무 후회스럽다. 특히 나는 무언가에 몰두하면 시야가 좁아지기 쉬운 사람인데, 열심으로 인해 주변의 상황을 보지 못한 경우가 너무나도 많았기 때문이다. 가족이 무슨 생각을 하는지, 친구가 뭐에 관심이 있는지, 연인이 어떤 힘듦이 있는지 이러한 것들을 그동안 너무 보지 못하고 살아왔던 것 같다. ..
26.06.22 ~ 26.06.26대한민국 월드컵 경기를 보며이번 주 목요일에는 남아공과의 대한민국 월드컵 축구 경기가 있었다. 회사에서 업무 시간이어서 다 챙겨 보지는 못했지만, 중간중간 소식을 들을 때마다 아쉬움이 많이 느껴졌다. 가장 아쉬웠던 부분은, 0대 1로 지고 있는데 최소 비기기는 해야 하는 경기에서 우리나라 선수들이 적극적으로 공을 앞으로 가져가지 못하는 상황을 보았을 때였다. 아마 해설을 하던 위원들도 답답해하는 것 같았다. 결과는 이미 나왔고 사람들은 32강에 가기 위한 경우의 수를 계산하고 있는데, 나는 개인적으로 32강에 가지 않고 귀국해서 다시 팀을 꾸리는 게 어떨까 하는 생각이 든다.여러 문제점들이 많이 나왔지만, 선수들의 역량 부족과 자신감 부족이라는 측면이 가장 아쉬웠다. 공..
26.06.15 ~ 26.06.19허리 통증과 근육 뭉침, 꾸준한 스트레칭의 중요성나는 개발자로 일을 시작한 뒤로 꾸준하게 허리 통증과 근육 뭉침 증상으로 힘들었다. 내가 찾아보니 지금 내 증상이 퇴행성 디스크의 증상과 유사한 점이 많다는 것을 알게 되었다. 그래서 21년부터 거의 매년 빠지지 않고 도수 치료를 받았었다. 회당 10만 원~20만 원 정도 수십 회를 받으면 비용이 상당히 많이 든다. 하지만 그때뿐, 치료가 끝나면 다시 통증이 찾아왔다. 그리고 작년에는 트래일러닝을 하면서 허벅지에 쥐도 몇 번 나고, 근육이 뭉쳐 있는 증상이 운동을 하고 나서 풀어주지 않으면 위험해질 수 있다는 것도 알게 되었다.그래서 나는 폼롤러를 구입해서 폼롤러 스트레칭과 허리, 어깨, 목 부분을 중심으로 스트레칭을 시작..
DevOwen
오웬의 개발 이야기