본문 바로가기

C++ 코딩 문제 풀이/백준113

[Baekjoon] 18405번: 경쟁적 전염 https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 문제 해결 과정 착안 우선순위 큐(priority queue) 자료 구조를 활용하여, 바이러스 번호가 낮은 순으로 먼저 너비 우선 탐색(breadth-first search, BFS)을 수행함으로써 문제를 해결하고자 하였다. * 우선순위 큐 대신, 배열 및 정렬 알고리즘을 사용하여 해결하면 속도 측면에서 더 유리한 것 같다. 구현 좌표를 나타내기 위한 구조체 Coor.. 2023. 7. 21.
[Baekjoon] 1541번: 잃어버린 괄호 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제 해결 과정 착안 주어지는 식에 괄호를 적절히 씌워 결과값이 최소가 되게 하려면, 최대한 뺄셈을 많이 수행하고 큰 숫자를 빼는 것과 같으므로, 뺄셈을 기준으로 식을 나누어 괄호를 씌우는 것과 같다 (또는, 주어진 식에서 덧셈 연산을 뺄셈 연산보다 높은 우선순위로 계산한 다음 왼쪽부터 순차적으로 뺄셈을 수행하는 것과 같다). 구현 주어진 식에 대해 덧셈 연산을 우선적으로 진행한 다음, 식의.. 2023. 7. 17.
[Baekjoon] 11053번: 가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 해결 과정 착안 이번 포스트에서 다루는 문제는 최장증가부분수열(longest incresing subsequence, LIS)을 구하는 문제인데, 이 문제는 다음과 같은 점들을 고려하여 효율적으로 해결할 수 있다. $n$ 개의 항으로 이루어진 수열 $\{a_i\} \space (1 \leq i \leq n)$에 대.. 2023. 7. 15.
[Baekjoon] 16139번: 인간-컴퓨터 상호작용 https://www.acmicpc.net/problem/16139 16139번: 인간-컴퓨터 상호작용 첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째 www.acmicpc.net 문제 해결 과정 착안 입력으로 주어지는 문자열의 길이 $n$이 매우 길기 때문에 ($1 \leq n \leq 200000$) 동적계획법(dynamic programming)을 통해 각 알파벳 소문자 별로 인덱스 0부터 $i \space (i < n)$ 까지 해당 알파벳이 등장하는 횟수의 누적합을 먼저 계산하고, 구간이 주어질 때마다 누적합을 이용해.. 2023. 7. 14.
[Baekjoon] 11399번: ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 해결 과정 착안 뒤에서 기다리는 사람이 돈을 인출하려면 자신보다 앞 번호에 대기 중인 사람들이 모두 돈을 인출해야하므로, 각 사람이 돈을 인출하는데 필요한 시간의 총합을 최소로 하기 위해서는 인출하는 시간이 짧은 사람을 앞에 배치하여야 한다. 따라서, 우선순위 큐(priority queue) 자료 구조를 이용하여 인출하는 시간의 정보를 저장한 다음, 최소 인출시간인 사람부터 순차적으로 우선순위 큐에서 추출하는 방식을 활용.. 2023. 7. 13.
[Baekjoon] 2110번: 공유기 설치 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 문제 해결 과정 착안 공유기를 설치했을 때 가장 인접한 두 공유기 사이의 거리의 최댓값을 찾기 위해, 이진 탐색(binary search, 이분 탐색)을 응용하여 문제를 해결하고자 하였다. 구현 입력받은 $N$ 개의 집 좌표를 배열 Houses[]에 저장하여 오름차순으로 정렬하면, 가장 인접한 두 공유기 사이의 거리를 $c$ 라고 했을 때 설치하.. 2023. 7. 12.