본문 바로가기

백준 알고리즘66

[백준 C++] 1238번 : 파티 1. 문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 2. 알고리즘 분류 그래프 이론 데이크스트라 3. 소스 코드 #include #include #include #define INF 987654321 using namespace std; int N, M, X; vector graph[2][1001]; vector dist[2]; // 데이크스트라 알고리즘(최단거리 구하는 알고리즘) void Dijstra(i.. 2023. 1. 24.
[백준 C++] 17144번 : 미세먼지 안녕! 1. 문제 https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 2. 알고리즘 분류 구현 시뮬레이션 3. 소스 코드 #include #include using namespace std; int R, C, T; int total_dust = 0; int dr[] = { -1, 0, 1, 0 };// row 방향배열 int dc[] = { 0, 1, 0, -1 };// col 방향배열 int map[50][50];// 맵 정보 vector air_cl.. 2022. 12. 11.
[백준 C++] 14938번 : 서강그라운드 1. 문제 https://www.acmicpc.net/problem/14938 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 2. 알고리즘 분류 그래프 이론 데이크스트라 플로이드-워셜 3. 소스 코드 3-1) 일반 DFS 활용 #include #include #include using namespace std; int max_item;// 최대 아이템 갯수 int items[101];// 각 지역의 아이템 갯수 bool visited[101];// 방문한 지역 체크 vector graph[101];// 지역 간의 .. 2022. 12. 9.
[백준 C++] 14502번: 연구소 1. 문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 2. 알고리즘 분류 구현 그래프 이론 프루트포스 알고리즘 그래프 탐색 너비 우선 탐색 3. 소스 코드 #include #include #include #include #include using namespace std; int N, M, max_safetyArea = 0; int map[10][10]; int tmp_map[10][10]; int dy[] = { -1, 0, 1, 0 }; int d.. 2022. 12. 8.
[백준 C++] 13172번 : Σ 1. 문제 https://www.acmicpc.net/problem/13172 13172번: Σ 모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다. www.acmicpc.net 2. 알고리즘 분류 수학 정수론 분할 정복을 이용한 거듭제곱 모듈로 곱셈 역원 페르마의 소정리 3. 소스 코드 #include #define MOD 1000000007 using namespace std; // n^m을 구하는 함수 // 분할 정복을 이용한 거듭제곱 long long power(long long n, long long m) { long long ret = 1; while (m) { if (m & 1) ret = ret * .. 2022. 12. 8.
[백준 C++] 12851번 : 숨바꼭질 2 1. 문제 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 2. 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 3. 소스 코드 #include #include #define INF 987654321 using namespace std; int dist[200005]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //.. 2022. 12. 4.
[백준 C++] 11054번 : 가장 긴 바이토닉 부분 수열 1. 문제 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 2. 알고리즘 분류 다이나믹 프로그래밍 3. 소스 코드 #include #include using namespace std; int N, ans; int arr[1000]; int dp_asc[1000]; int dp_dec[1000]; int dp_bitonic[1000]; void input() { cin >> N; for (int i = 0; i > arr[i]; } voi.. 2022. 12. 2.
[백준 C++] 10830번 : 행렬 제곱 1. 문제 https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 2. 알고리즘 분류 수학 분할 정복 분할 정복을 이용한 거듭제곱 선형대수 3. 소스 코드 #include using namespace std; long long N, B; long long matrix[5][5]; long long ans[5][5]; void input() { // N : 행렬의 크기, B : 거듭제곱 횟수 cin >> N >> B; for (int y = 0; y < N; y++).. 2022. 11. 30.
[백준 C++] 15652번 : N과 M(5) 1. 문제 https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 2. 알고리즘 분류 백트래킹 3. 소스 코드 #include #include #include using namespace std; int N, M; int visited[10];// 사용된 숫자 체크(중복 방지용) vector inputs; vector nums; // 수열을 구하는 함수 // lv : 뽑은 숫자의 갯수 void permutation(int lv) { // M개.. 2022. 11. 29.
[백준 C++] 15652번 : N과 M(4) 1. 문제 https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 알고리즘 분류 백트래킹 3. 소스 코드 #include #include using namespace std; int N, M; vector nums; // 순열을 구하는 함수 // lv : 뽑은 숫자의 갯수, num : 이전에 뽑았던 수 void permutation(int lv, int num) { // M개의 숫자를 뽑을 경우, 출력 if (lv == M) { // 해당 순열.. 2022. 11. 29.