/images/logo.png

[백준]11403 경로 찾기

https://www.acmicpc.net/problem/11403 풀이: [C++]플로이드-와샬 알고리즘(Floyd-Warshall Algorithm) 참고 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <iostream>#define F(i,n)for(int i=0;i<n;i++) using namespace std; int n, a[102][102]; int main() { cin >> n; F(i, n) F(t, n) cin >> a[i][t]; F(u, 2) F(i, n) F(t, n) F(y, n) if(!a[i][t]) a[i][t] = a[i][y] & a[y][t]; F(i, n) { F(t, n) cout << a[i][t] << " "; cout << endl; } }

[백준]2468 안전 영역

https://www.acmicpc.net/problem/2468 풀이: 물의 높이가 h 일 때, 지역의 높이가 h보다 작거나 같다면 잠겨있는 지역이라고 한다. 모든 지역을 순회하며, 현재 지역이 잠겨있지 않다면, 방문 표시를 해두고, 왼쪽, 오른쪽, 위, 아래 에 잠겨있지 않은 곳을 순회하며 방문표시를 한다. 연결된 모든 곳을 방문했다면, 안전한 영역을 +1 해준다. 물의 높이를 0 ~ (지역 중 최대 높이) 까지 순회한 후 안전한 영역의 최대치를 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <iostream>#define F(i,n)for(int i=0;i<n;i++) using namespace std; int n, m = 0, a[102][102], b[102][102], s, r = 0; void A(int x, int y) { b[x][y] = 0; if (x > 0 && b[x - 1][y]) A(x - 1, y); if (y > 0 && b[x][y - 1]) A(x, y - 1); if (x + 1 < n && b[x + 1][y]) A(x + 1, y); if (y + 1 < n && b[x][y + 1]) A(x, y + 1); } int main() { cin >> n; F(i,n)F(t,n){ cin >> a[i][t]; m = m < a[i][t] ?

[백준]11724 연결 요소의 개수

https://www.acmicpc.net/problem/11724 풀이: 방문하지 않은 정점과 연결된 모든 정점을 방문표시하고, 요소의 개수를 +1 해준다. 더이상 방문할 정점이 없을때까지 반복한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <iostream>#include <vector>using namespace std; int n, m, i, t, c = 0, b[1002]; vector<vector<int>> a; void T(int x) { if (b[x]) return; b[x] = 1; for (int o : a[x]) T(o); } int main() { cin >> n >> m; a.

[백준]13458 시험 감독

https://www.acmicpc.net/problem/13458 풀이: 각 시험장에 총감독관 1명씩이 꼭 들어간다. 즉 각 시험장에 있는 응시자의 수에서 총감독관이 감시할 수 있는 응시자의 수 B를 빼준다. 빼준 값에서 부감독관이 감시할 수 있는 응시자의 수 C를 나눈 값을 올림해 준다면, 부감독관의 수가 나온다. 감독관들의 수를 모두 더한값을 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream>#include <math.h>using namespace std; long long n, i, b, c, a[1000002], s = 0; int main() { cin >> n; for (i = 0; i < n; i++) cin >> a[i]; cin >> b >> c; for (i = 0; i < n; i++) { a[i] -= b; if (a[i] > 0) s += ceil((double)a[i] / c); s++; } cout << s << endl; }

[백준]2309 일곱 난쟁이

https://www.acmicpc.net/problem/2309 풀이: 아홉 난쟁이의 키의 합을 S라고 하자. 아홉 난쟁이 중 랜덤으로 뽑은 두 명의 키의 합을 T라고 하자. S - T = 100 이라면 뽑은 두 난쟁이를 제외하고 오름차순으로 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <iostream>#include <algorithm>using namespace std; int a[9], i, t, s = 0; int main() { for (i = 0; i < 9; i++) { cin >> a[i]; s += a[i]; } sort(a, a + 9); for (i = 0; i < 9; i++) { for (t = i + 1; t < 9; t++) if (s - a[i] - a[t] == 100) break; if (s - a[i] - a[t] == 100) break; } for (s = 0; s < 9; s++) if (s !

[백준]2442 별 찍기 - 5

https://www.acmicpc.net/problem/2442 풀이: 1 번째 줄부터 차례대로 1개 3개 5개 . . . i * 2 - 1 개 의 별을 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 #include <iostream>using namespace std; int n, i, t; int main() { cin >> n; for (i = 1; i <= n; i++) { for (t = 0; t < n - i; t++) cout << " "; for (t = 0; t < 2 * i - 1; t++) cout << "*"; cout << endl; } }