Codeforces 25A. IQ Test

문제 https://codeforces.com/problemset/problem/25/A 풀이 n 개의 원소를 가진 수열이 입력으로 들어오고 입력으로 들어온 숫자 중 홀/짝이 다른 하나의 숫자의 인덱스(1-base 인덱스)를 출력하면 된다. 수열이 들어올 때마다 홀/짝 각각의 마지막 인덱스를 저장하고, 홀수의 개수, 짝수의 개수를 세면된다. 마지막 이렇게 얻어진 개수로 홀/짝인지 판별을 한 뒤에, 홀수면 짝수의, 짝수면 홀수의 마지막 인덱스를 출력하면 된다. 코드 #include <iostream> int main() { int n; std::cin >> n; int oddCount = 0; int evenCount = 0; int oddIndex = 0; int evenIndex = 0; for (int i = 1; i <= n; ++i) { int number; std::cin >> number; if (number % 2 == 0) { evenCount++; evenIndex = i; } else { oddCount++; oddIndex = i; } } std::cout << (oddCount == 1 ? oddIndex : evenIndex) << std::endl; }

July 27, 2026

Codeforces 4C. Registration System

문제 https://codeforces.com/problemset/problem/4/C 풀이 데이터베이스를 흉내내는 문제이다. n 개의 스트링이 입력으로 주어지고(각각의 스트링을 name 이라고 한다), 그 스트링이 만약 등록된 이름이면 이름 + 번호를 붙여서 출력하고 등록되지 않은 이름이면 'OK'를 출력하면 된다. 딕셔너리를 쓰면 가장 쉽게 해결 가능하다. 딕셔너리에 name을 키로, 그리고 등장한 횟수를 값으로 저장하면 쉽게 존재 판별과 번호 붙이기 둘 다 가능하다. 코드 #include <iostream> #include <map> int main() { int n; std::cin >> n; std::map<std::string, int> db; while (n--) { std::string name; std::cin >> name; if (db.find(name) != db.end()) { db[name]++; std::cout << name << db[name] << std::endl; } else { db[name] = 0; std::cout << "OK" << std::endl; } } return 0; }

July 27, 2026

Leetcode 1464. Maximum Product of Two Element in an Array

문제 https://leetcode.com/problems/maximum-product-of-three-numbers 풀이 정수형 배열 nums 안에서 세 개의 수를 뽑아 곱한 값 중 최대값을 리턴하면 된다. LeetCode 3536 3536번 문제처럼 nums 배열을 정렬하면 된다. 다만 이번에는 3개의 수를 뽑아야 하기에, 음수, 음수, 양수도 정답의 후보가 될 수 있다. 따라서 정답의 후보는 다음과 같다. 가장 작은 값 2개와 가장 큰 값 1개를 곱한 값 가장 큰 값 3개를 곱한 값 이 두 수를 계산한 다음, 대소를 비교해서 리턴하면 된다. 코드 class Solution: def maximumProduct(self, nums: List[int]) -> int: nums.sort() return max(nums[-1] * nums[-2] * nums[-3],nums[0] * nums[1] * nums[-1])

July 26, 2026

Leetcode 3536. Maximum Product of Two Digits

문제 https://leetcode.com/problems/maximum-product-of-two-digits 풀이 10 이상 10억 이하의 정수 n이 주어지고, 각 자리수 중 두 개를 골라서 곱한 값중 가장 큰 수를 리턴하면 되는 문제이다. 문제의 힌트에선 브루트 포스를 사용하라 했는데, 정렬하면 더 쉽게 풀 수 있다. 코드 class Solution: def maxProduct(self, n: int) -> int: digits = sorted(str(n), reverse=True) return int(digits[0]) * int(digits[1])

July 25, 2026

TIL. Jul 24, 2026

키워드 XOR 비트연산 Observation 블로그 스크립트 정리, git hook 내용 XOR 연산 LeetCode에 어제에 이어서 XOR 연산 문제가 나왔다. 일반적인 사칙연산과 다른 특징들을 사용해야하는 문제들이었다. 가장 큰 특징은 비트 연산은 비트 수가 고정되어 있어서 연산의 결과가 엄청나게 많은 경우의 수를 만들지 않는다. 예를 들어서, 곱셉의 경우에는 $10^3$ 미만의 두 수를 곱하면 최대 999 * 999 = 약 100만이 되어서 거의 7자리수의 경우의 수가 되는데, 비트연산은 더 이상 자리수의 확장이 일어나지 않는다. ...

July 24, 2026

SwiftUI. Discover Observation in SwiftUI - WWDC23

SwiftUI의 Observation은 모델의 프로퍼티 변화를 추적하고, 그 변화에 맞춰 UI를 업데이트하는 기능이다. @Observable 매크로를 사용하면 별도의 ObservableObject, @Published, @ObservedObject 없이도 일반 Swift 타입에 가까운 형태로 관찰 가능한 모델을 만들 수 있다. 핵심은 간단하다. View가 읽은 프로퍼티가 바뀌면, 그 View가 다시 계산된다. 이 글에서는 Observation의 동작 방식, @State, @Environment, @Bindable을 언제 써야 하는지, 그리고 기존 ObservableObject 기반 코드를 @Observable로 옮기는 방법을 정리한다. Observation @Observable은 Swift 매크로다. 타입에 이 매크로를 붙이면 컴파일러가 해당 타입을 관찰할 수 있도록 코드를 확장한다. ...

July 24, 2026

Leetcode 3514. Number of Unique XOR Triplets II

문제 https://leetcode.com/problems/number-of-unique-xor-triplets-ii 풀이 n 길이의 배열 nums가 주어지고, 여기에서 3개의 인덱스 i, j, k를 (i <= j <= k) 뽑아서 XOR 했을 때, 얻을 수 있는 모든 결과의 수를 리턴하는 문제이다. Leetcode 3513 문제와 다른 점은, nums가 순열이 아니다. 따라서, 자연스럽게 모든 경우의 수를 커버하지 못한다. 다만, 인덱스 제약조건이 저번과 같으므로 ‘값 3개를 무작위’로 뽑는다는 점은 같다. 여전히 n이 최대 1500이기 때문에, $O(n^3)$ 으로 풀기에는 무리가 있다. 우선, 값의 중복을 가리지 않고, 인덱스도 가리지 않으므로 배열의 순서가 중요하지 않다. 따라서 배열에 있는 모든 중복을 제거하는 전처리를 한다. ...

July 24, 2026

Codeforces 492B. Vanya and Lanterns

문제 https://codeforces.com/contest/492/problem/B 풀이 길의 길이 l과 가로등의 위치 배열 a가 주어지고, 모든 가로등이 길 전체를 비춰야 할때, 가로등 하나가 비추는 거리 d를 출력하는 문제이다. 문제 풀이는 단순하다. 가로등 사이의 간격을 계산하고, 그 간격을 모두 채울수만 있으면 된다. 가로등이 길을 비추는 건 3가지 케이스로 생각해볼수 있다. 시작 가로등 (양 옆에 가로등이 있는) 중간 가로등 끝 가로동 1번 3번 케이스가 엣지 케이스인데, 중간 가로등은 가로등 사이의 거리의 절반 만큼만 비추면 되지만, 시작 가로등과 끝 가로등은 시작점과 자신의 위치까지를 모두 스스로 비춰야 해서, 따로 처리해줘야 한다. ...

July 24, 2026

SwiftUI. The Swiftui Cookbook for Navigation - WWDC22

The SwiftUI cookbook for navigation SwiftUI의 새로운 내비게이션 API를 발표한 WWDC 세션을 정리했다. 이 내비게이션 API는 각각의 NavigationLink가 관리하는 대신, 스택 전체의 상태를 데이터로 표현하고 직접 조작할 수 있게 만든다. 이 구조를 사용하면 버튼을 눌러 이동하는 기본적인 내비게이션뿐만 아니라, 딥 링크나 특정 화면으로 바로 이동하기, 루트 화면으로 돌아가기, 현재 내비게이션 상태 저장까지 같은 모델로 처리할 수 있다. New naviation API: 새로운 Data-driven 내비게이션 API Recipes for navigation: 탐색을 프로그래밍 방식으로 완전히 제어하기 Persistent state: 새로운 API를 이용하여 앱의 내비게이션 상태를 유지하기 i갑자기 프로그래밍 방식? SwiftUI는 처음부터 코드로 UI를 작성하는 프레임워크였기 때문에, 기존 NavigationView도 isActive나 selection을 이용해 화면을 프로그래밍 방식으로 전환할 수 있었다. ...

July 23, 2026

Leetcode 3513. Number of Unique XOR Triplets I

문제 https://leetcode.com/problems/number-of-unique-xor-triplets-i 풀이 1에서 n까지의 모든 값이 들어있는 n 크기 배열 nums 배열이 주어지고, 그 배열에서 인덱스 3개 i, j, k (i <= j <= k)를 골라서 XOR 했을 때, 나올 수 있는 모든 값을 리턴하면 되는 문제이다. nums 배열의 크기가 10만이고, 브루트 포스를하면 시간 복잡도가 $O(n^3)$ 이기 때문에 시간 내에 해결할 수 없다. nums가 순열이라는 것과 XOR의 연산 특징을 알면 생각보다 간단한 공식으로 해결할 수 있다. 우선 인덱스 제약조건은 없는 것과 마찬가지인데, 등호를 포함한 대소관계이기 때문에, 인덱스를 중복해서 골라도 된다. ...

July 23, 2026