26.07.27 ~ 26.07.31AI Agent를 만드는 업무를 시작했다7월에 조직 개편이 되면서 팀 내에서 사용할 AI Agent를 만드는 업무를 새롭게 하게 될 예정이다. 지금까지 내가 해 왔던 익숙했던 작업들과 다른 작업들이라 조금 걱정되기도 하고 잘 할 수 있을까 두렵지만, 그래도 도전적인 업무를 하면서 내가 성장할 수 있을 것 같아서 만족스럽다. 여러 서드파티 연동을 해야 하는 서비스이고, 인증 절차도 까다로워서 이러한 부분에서 고민의 영역이 많지만, 잘 정리하면 나한테 의미가 있는 프로젝트가 될 것 같아서 기쁘다. 자세하게 말할 수는 없지만, 팀 안에서 매번 사람이 수동으로 해야 하는 여러 길고 복잡한 작업들을 AI가 알아서 다 하게 만들어 주는 슬랙 봇을 만들게 되었다. 이틀 만에 초안을 ..
전체 글
안녕하세요. 사진과 철학에 관심이 많은 웹 프론트엔드 개발자 오원종입니다. 시간이 지나도 꾸준히 읽힐 수 있는 글을 쓰고 싶습니다. 재미있는 일만 하면서 살고 있는 사람입니다.최근에 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강에 가지 않고 귀국해서 다시 팀을 꾸리는 게 어떨까 하는 생각이 든다.여러 문제점들이 많이 나왔지만, 선수들의 역량 부족과 자신감 부족이라는 측면이 가장 아쉬웠다. 공..
