문제 링크 https://www.acmicpc.net/problem/20303 20303번: 할로윈의 양아치 첫째 줄에 정수 $N$, $M$, $K$가 주어진다. $N$은 거리에 있는 아이들의 수, $M$은 아이들의 친구 관계 수, $K$는 울음소리가 공명하기 위한 최소 아이의 수이다. ($1 \leq N \leq 30\ 000$, $0 \leq M \leq 100\ 000$, www.acmicpc.net 💡 풀이 중간에 시행착오가 좀 있었지만, Union-Find와 배낭 문제를 이용하면 풀 수 있는 문제입니다. 서로 친구 관계가 있는 아이들끼리 Union-Find를 통해 그룹을 만들어 줍니다. 각 그룹의 인원 수, 그룹의 총 사탕 개수로 이루어진 노드를 만들고 DP를 이용해 얻을 수 있는 최대 사탕 개..
리액티브 시스템과 리액티브 프로그래밍이 무엇인지 살펴봅시다. 리액티브 시스템(Reactive System)이란? 리액티브 시스템은 쉽게 말해 반응을 잘하는 시스템입니다. 반응을 잘한다는 것은 클라이언트의 요청에 머뭇거리지 않고 반응을 잘해서 즉시 응답해 주는 것을 의미합니다. 다시 말해서, 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화한다 고 볼 수 있습니다. 리액티브 선언문 리액티브 선언문은 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징 을 나타낸 것입니다. 자세한 내용은 아래 링크에서 확인 할 수 있습니다. https://www.reactivemanifesto.org/ko 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유..
문제 링크 https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 💡 풀이 49개의 숫자 중 주어진 K개 만큼 수를 골라 그 K개 중 6개로 집합 S를 만드는 문제입니다. 주어진 K개 중 6개를 순서 없이 중복을 허용하지 않고 고르는 경우 즉, $_kC_6$ 인 조합을 구하는 문제입니다. 조합을 구현 할 줄 안다면 간단하게 풀 수 있는 문제입니다. 조합(Combination) 자바에서 조합을 구현하기 위해 재귀를 사용했습니다. 우선, `nu..
문제 링크 https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 💡 풀이 문제 풀이의 큰 틀은 우선 입력 받는 보석 [M, V]를 무게(M) 기준으로 오름차순 정렬하여 리스트에 저장합니다. 이때, 무게가 같다면, 가격을 기준으로 내림차순 정렬합니다. 입력 받는 가방 또한, 가방에 담을 수 있는 최대 무게를 기준으로 오름차순 정렬합니다. 그 뒤 탐색을 시작합니다. 탐색은 가방을 기준으로 진행..
문제 링크 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크 www.acmicpc.net 💡 풀이 색종이의 크기에 따라 붙여 나아가며 붙일 수 없는 경우 되돌아오는 백트래킹을 이용하여 풀이 할 수 있습니다. 그래프의 (0, 0)부터 차례대로 탐색하며, 0인 경우 옆으로 넘어가고, 1인 경우 붙일 수 있는 여부를 확인해 진행하는 방식을 이용했습니다. BackTracking 백트래킹 함수의 파라미터로는 ( y좌표, x좌표, 지금까지 사용한 색종이 수) 이렇게 3가지를 ..
문제 링크 https://www.acmicpc.net/problem/17281 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종 www.acmicpc.net 💡 풀이 주어진 야구 룰에 따라 구현하면 되는 문제인데, 관건은 자바에서 따로 메서드를 제공하고 있지 않은 순열을 구현하는 부분이었던 것 같습니다. 1번 선수부터 9번 선수의 타격 순서를 비교해가며 최대값을 찾는 것이기 때문에 순열을 이용했습니다. 야구 룰에 맞게 구현만하면 되는 문제입니다. 순열 Permutation이라고 불리는 순열을 사용해 만들 수 있는 모든 타순에 대해 탐색을 진행합니..