TIL. Aug 7, 2026

오늘 한 내용 PS Codeforces 459B dev-data-server-light Auth 기능 추가 에이전트 설정 정리 블로그 클론 이후 Mermaid 재설치와 npm audit 확인 배운 내용 AI 에이전트 설정 문서의 역할 AGENTS.md, Rule, Workflow, Skill의 역할을 다시 정리했다. AGENTS.md: 프로젝트 구조, 아키텍처, 사용 기술처럼 항상 필요한 정보 Rule: 프로젝트 전반에서 지켜야 하는 규칙 Workflow: 반복 작업의 절차 Skill: 특정 분야의 지식과 작업 방법 모든 내용을 하나의 AGENTS.md에 넣기보다, 에이전트가 현재 작업에 필요한 컨텍스트만 읽을 수 있도록 성격과 범위에 따라 나누는 편이 낫다. ...

August 7, 2026

Codeforces 459B. Pashmak and Flowers

문제 https://codeforces.com/problemset/problem/459/B 풀이 n의 원소가 있는 수열 b가 주어진다. b의 원소 두 개를 짝지었을 때, 두 원소의 차이가 가장 클때의 그 차이와, 그 경우의 원소짝의 개수 출력하면 된다. 경우의 수를 구하기 위해 ‘가장 큰 값’을 가진 원소의 개수와 ‘가장 작은 값’을 가진 원소의 개수를 구해야 한다. 가장 큰 값을 가진 원소의 개수를 $maxCount$, 가장 작은 값을 가진 원소의 개수를 $minCount$ 라고 했을 때, 경우의 수는 $maxCount \times minCount$로 어렵지 않게 구할 수 있다. ...

August 7, 2026

TIL. Aug 6, 2026

오늘 한 내용 LeetCode 3345 Codeforces 489C 블로그 스크립트 구조화, npm run 스크립트 정리 StackDay 프로젝트 도메인, 데이터 모델, 유즈케이스, MVP 범위 정리 Codex SKILL 공부 배운 내용 그리디 의심하기 Codeforces 489C를 DP로 한참 구현하다가, 뒤늦게 그리디로 해결되는 문제라는 걸 알게 되었다. PS에서는 완전탐색 → 그리디 → DP 순서로 가능성을 검토하는 습관이 중요한 것 같다. 그리디가 최적인 것을 증명하는 연습이 더 필요하다는 것을 느꼈다. 경험을 통한 직관으로… 정책 -> 도메인 -> 데이터 모델 -> 유즈케이스 순서로 사고하기 Day Stack을 한번 뒤엎어야 했던 어제의 실패를 반면교사 삼아서, 이번엔 실제 구현에 들어가기 전에 도메인과 정책부터 제대로 잡으려 했다. ...

August 6, 2026

Codeforces 489C. Given Length and Sum of Digits

문제 https://codeforces.com/problemset/problem/489/C 풀이 자리수가 m이고 각 자리수의 합이 s인 정수 중 가장 큰 수와 가장 작은 수를 찾는 문제이다. 처음에는 DP로 접근했는데, DP로는 수의 개수 정도만 구할 수 있고, 최대값과 최소값을 찾기는 힘들 것 같았다. 그래서 다시 그리디로 접근했다. 자리수가 m인데 $1 <= m <= 100$ 이기 때문에, int 타입으로 수를 다루는건 쉽지 않고, 배열이나 벡터로 다루는게 더 쉽다. 최대값은 계수가 높은 쪽에 큰 숫자를 배치하고, 최소값은 계수가 낮은 쪽에 큰 숫자를 배치하는 방법을 사용하자. ...

August 6, 2026

Leetcode 3345. Smallest Divisible Digit Product I

문제 https://leetcode.com/problems/smallest-divisible-digit-product-i 풀이 n보다 큰 수 중에서 각 자리수의 곱이 t로 나눌 수 있는(나머지가 0인 ) 가장 작은 수를 리턴해야 한다. 문제의 제약조건이 $1 <= n <= 100$, $1 <= t <= 10$ 이라서 모든 수를 찾아봐도 된다. 정수의 각 자리수를 모두 곱한 수를 구하는 로직만 구현한 후에, n 부터 시작해서 숫자를 1씩 증가시키면서 t로 나눈 나머지를 구해서 찾으면 된다. 코드 class Solution: def smallestNumber(self, n: int, t: int) -> int: def productDigits(x: int) -> int: product = 1 while x > 0: product *= x % 10 x //= 10 return product answer = n while productDigits(answer) % t != 0: answer += 1 return answer

August 6, 2026

TIL. Aug 5, 2026

오늘 한 내용 LeetCode 3310 Codeforces 451B Stack day 코드 뒤엎기 배운 내용 Swift BFS에서 조금 더 쉽게 큐 사용하기 Swift에서 BFS 문제를 풀 때, 대부분 함수로 분리하고, struct Queue { ... } 처럼 헤더 포인터 변수를 사용하는 유사 큐를 만들어서 썼다. struct Queue { //... } func bfs(start: Int) { //... } 오늘 LeetCode 3310번 문제를 풀면서, 방문 체크 배열을 외부에서도 확인해야 하는 문제여서 inout으로 넘기기 보다는, BFS 로직을 인라인으로 쓰는 방법을 했는데, 생각해보니 큐도 그냥 BFS 로직 안에 인라인으로 쓰면 되지 않나 라는 생각이 들었다. ...

August 5, 2026

LeetCode 3310. Remove Methods From Project

문제 https://leetcode.com/problems/remove-methods-from-project 풀이 메소드 k에서 시작해서 도달할 수 있는 노드들을 ‘suspicious’ 하다고 했을 때, 이 ‘suspicious’한 메소드들을 k가 직, 간접적으로 호출하는 것을 제외하고도 호출되는 경우가 있는지 확인하고 있다면 전체 메소드를, 없다면 ‘suspicious’한 메소드를 제외하고 리턴하면 된다. 메소드들의 호출 관계가 단방향 엣지 그래프를 이루기 때문에, BFS나 DFS 무엇을 써도 쉽게 k가 직, 간접적으로 호출하는 함수들을 알 수 있다. k에서 시작해서 도달하는 모든 메소드들은 ‘suspicious’ 하기 때문에 방문 여부를 확인하는 배열을 그대로 사용하면 된다. ...

August 5, 2026

Codeforces 451B. Sort the Array

문제 https://codeforces.com/problemset/problem/451/B 풀이 n 크기 수열 a가 주어진다. 이 수열의 특정 구간을 선택해서 뒤집는 것을 1번 했을 때, 이 수열이 오름차순으로 정렬되어 있다면 "yes"와 그 구간을, 불가능하면 "no"를 출력하면 된다. n의 제약 조건이 $1 <= n <= 10^5$ 이기 때문에, 브루트 포스로는 시간 내에 풀기 힘들다. 특정 구간을 선택해서 뒤집는 행동을 1번만 한다는 것이 힌트인데, 구간 하나를 1번 뒤집어서 수열 전체가 오름차순이 된다는 것은, 수열의 일부 구간만 내림차순 이라는 것이다. ...

August 5, 2026

TIL. Aug 4, 2026

오늘 한 내용 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 벡터로 문제를 풀었다. ...

August 4, 2026

Codeforces 580C. Kefa and Park

문제 https://codeforces.com/problemset/problem/580/C 풀이 노드의 값이 1 혹은 0인 트리 그래프와 그 크기인 정수 n이 주어진다. 루트 노드인 1번 노드에서 시작했을 때, 중간에 값이 1인 노드를 연속으로 m번을 초과해서 만날 수 없다. 이 때, 도달할 수 있는 리프 노드의 개수를 출력하면 된다. 트리 전체를 탐색하면서 연속으로 조우한 값이 1인 노드 개수를 관리하면 된다. 그리고 현재 방문한 노드가 리프 노드인지 판정하고, 만약 리프 노드면 1을 더하면 된다. 트리도 그래프이기 때문에, BFS, DFS 어느 쪽이든 가능하지만, 풀이를 할 때 DFS를 사용했다. ...

August 4, 2026