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] ?
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.
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; }
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 !
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; } }