Minjun Kim

Minjun Kim

[PS] BOJ 1976 / 여행 가자
PS

[PS] BOJ 1976 / 여행 가자

문제 링크: https://www.acmicpc.net/problem/1976 분리 집합 (Disjoint Set) 기반의 유니온 파인드 알고리즘을 활용하는 문제입니다. 풀이 유니온 파인드(Union Find) 문제에서는 인접 행렬로 임의의 두 도시 사이의 연결 관계를 제공합니다. 가중치는 따로 없고, 두 도시 $i$와 $j$가 연결되어 있다면, 반대로도 연결되어 있습니다. (무방향) 이런 조건에서,
3 min read
[PS] BOJ 26125 / 두 도로
PS

[PS] BOJ 26125 / 두 도로

문제 링크: https://www.acmicpc.net/problem/26125 플로이드-워셜(Floyd-Warshall) 알고리즘을 활용하는 문제입니다. 풀이 플로이드-워셜(Floyd-Warshall)! 플로이드-워셜 알고리즘은 모든 정점에서 모든 정점으로 가는 최단 거리를 탐색하는 방법입니다. 다익스트라 알고리즘이 한 정점에서 다른 모든 정점으로의 최단 거리를 계산하는 점에서 차이가 있습니다. 모든 정점에서 모든 정점으로 가는 최단 거리를 탐색하기 때문에, $O(
5 min read
[PS] BOJ 14888 / 연산자 끼워넣기
PS

[PS] BOJ 14888 / 연산자 끼워넣기

문제 링크: https://www.acmicpc.net/problem/14888 백트래킹으로 수식을 완성해 나가는 문제입니다. 풀이 수열 사이에 연산자 채우기 입력으로 주어지는 수열 $A$의 각 수 사이에 +, -, $\times$, $\div$의 4가지 연산자를 임의로 채울 때, 전체 수식의 결과값의 최댓값과 최솟값을 구하는 문제입니다. 단, 각각의 연산자는 사용해야 하는 개수가 정해져 있습니다.
2 min read
[PS] BOJ 2418 / 단어 격자
PS

[PS] BOJ 2418 / 단어 격자

문제 링크: https://www.acmicpc.net/problem/2418 DFS로 가능한 모든 경우의 수를 세는데, 메모이제이션을 활용해야 합니다. 풀이 1) DFS 단어 격자에서 주어진 단어를 읽는 방법의 개수를 찾기 위해서는 그래프 탐색을 활용해야 합니다. 단, 같은 단어를 중복해서 방문할 수 있으므로 방문 여부를 기록하지 않습니다. 격자 그래프에서 8방향 (상하좌우 + 대각선)으로
4 min read
[PS] BOJ 16956 / 늑대와 양
PS

[PS] BOJ 16956 / 늑대와 양

문제 링크: https://www.acmicpc.net/problem/16956 그래프 탐색으로 푸는 간단한 문제입니다. 풀이 아이디어 이 문제는 스페셜 저지 문제이며, 울타리를 최소한으로 설치해야 하는 문제가 아닙니다. 오로지 울타리를 적절히 배치해 늑대와 양이 만나지 못하게 할 수 있는지 판단하는 문제이니, 단순히 빈 칸을 전부 울타리로 바꾸는 방법을 생각했습니다. 1. 입력을 받으면서,
2 min read
[PS] BOJ 32036 / 수열과 쿼리 45
PS

[PS] BOJ 32036 / 수열과 쿼리 45

문제 링크: https://www.acmicpc.net/problem/32036 아이디어를 도저히 떠올리지 못해서 다른 사람들의 풀이를 참고했습니다,, 설명을 이해하고 나니, 재밌는 문제였습니다. 풀이 문제 이해하기 길이가 $2 \times $ 109 + 1인 배열 $A$에는 -109 $\cdots$ 109까지의 각 인덱스에 0이 초기값으로 들어 있습니다. 이제, 다음의 두 쿼리로 배열 $A$를 조작합니다. 1.
5 min read
[PS] BOJ 18436 / 수열과 쿼리 37
PS

[PS] BOJ 18436 / 수열과 쿼리 37

문제 링크: https://www.acmicpc.net/problem/18436 세그먼트 트리를 활용해 구간 내 짝수와 홀수의 개수를 각각 저장해주면 됩니다. 풀이 세그먼트 트리? 세그먼트 트리에 대한 설명과 구간 합을 저장하는 세그먼트 이전 글을 참고해 주세요 😄 세그먼트 트리에 짝수/홀수의 개수 저장하기 가장 기본적인 세그먼트 트리의 구현은 구간 합을 저장하는 형태였습니다. 홀수와
9 min read
[PS] BOJ 30405 / 박물관 견학
PS

[PS] BOJ 30405 / 박물관 견학

문제 링크: https://www.acmicpc.net/problem/30405 아이디어만 떠올리면 구현은 쉬운 문제입니다. 풀이 모든 고양이의 이동 거리의 합을 최소로? 문제 입력에서 각각의 고양이가 박물관을 견학하는 순서를 주지만, 사실 고려할 필요가 없습니다. 어느 박물관을 출입점으로 정하던 각각의 고양이가 자신이 정한 순서로 박물관을 견학하는 총 거리는 항상 일정합니다. (출입문 ->
3 min read
[PS] BOJ 2357 / 최솟값과 최댓값
PS

[PS] BOJ 2357 / 최솟값과 최댓값

문제 링크: https://www.acmicpc.net/problem/2357 세그먼트 트리를 활용하는 기본적인 문제입니다. 다만, 구간 내 최솟값과 최댓값을 동시에 구해야 합니다. 풀이 세그먼트 트리? 세그먼트 트리에 대한 설명과 구간 합을 저장하는 세그먼트 이전 글을 참고해 주세요 😄 각 구간의 최솟값과 최댓값을 모두 구하기? 세그먼트 트리를 활용해 각 구간의 최솟값과 최댓값을 동시에
5 min read
[PS] BOJ 14428 / 수열과 쿼리 16
PS

[PS] BOJ 14428 / 수열과 쿼리 16

문제 링크: https://www.acmicpc.net/problem/14428 세그먼트 트리를 활용하는 기본적인 문제입니다. 다만, 세그먼트 트리에서 구간 내 최솟값이 아닌, 최솟값의 "인덱스"를 조회해야 합니다. 이를 위해 트리의 노드에 값을 어떻게 저장할지 고민이 필요했습니다. 풀이 세그먼트 트리? 세그먼트 트리에 대한 설명과 구간 합을 저장하는 세그먼트 이전 글을 참고해
7 min read
[PS] BOJ 10868 / 최솟값
PS

[PS] BOJ 10868 / 최솟값

문제 링크: https://www.acmicpc.net/problem/10868 세그먼트 트리를 활용하는 기본적인 문제입니다. 다만, 트리의 노드에 값을 어떻게 저장할지 고민이 필요했습니다. 풀이 세그먼트 트리? 세그먼트 트리에 대한 설명과 구간 합을 저장하는 세그먼트 이전 글을 참고해 주세요 😄 구간 합 대신에 최솟값 저장하기 이전에 구현했던 세그먼트 트리는 구간의 합을 저장했습니다. 이번 문제에서는
2 min read
[PS] BOJ 11505 / 구간 곱 구하기
PS

[PS] BOJ 11505 / 구간 곱 구하기

문제 링크: https://www.acmicpc.net/problem/11505 세그먼트 트리를 활용하는 기본적인 문제입니다. 풀이 세그먼트 트리? 세그먼트 트리에 대한 설명과 구간 합을 저장하는 세그먼트 이전 글을 참고해 주세요 😄 구간 합 대신에 구간 곱 저장하기 이전에 구현했던 세그먼트 트리는 구간의 합을 저장했습니다. 이번 문제에서는 구간 곱을 1,000,000,007로 나눈
5 min read
[PS] BOJ 16987 / 계란으로 계란치기
PS

[PS] BOJ 16987 / 계란으로 계란치기

문제 링크: https://www.acmicpc.net/problem/16987 계란 프라이가 먹고 싶은 밤입니다. 백트래킹으로 가능한 모든 경우를 탐색해 최댓값을 찾으면 됩니다. 풀이 문제 조건 분석하기 계란으로 계란을 치는 과정은 다음과 같습니다. 1. 가장 왼쪽의 계란을 든다. 2. 손에 들고 있는 계란으로 깨지지 않은 다른 계란 중에서 하나를 친다. 단, 손에
4 min read
[PS] BOJ 2252 / 줄 세우기
PS

[PS] BOJ 2252 / 줄 세우기

문제 링크: https://www.acmicpc.net/problem/2252 위상 정렬을 구현하는 정석적인 문제입니다. 풀이 위상 정렬? 위상 정렬이란, 순서가 정해져 있는 작업을 차례대로 수행하기 위해 그 순서를 결정해주는 알고리즘입니다. 방향 그래프에서, 모든 정점을 순서대로 방문하는 일직선의 순서를 찾는 방법이라고 생각하면 됩니다. 위상 정렬은 일반적으로 DAG (Directed Acyclic Graph)에만 적용
3 min read