일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
- 13459
- 적두트리
- stl
- 테스트주도개발
- Vite 사용 이유
- 백준
- 풀이
- LOLIN D32
- 9996
- WebRTC란
- TDD
- dp
- REACT
- 페이지교체알고리즘
- 구현
- mediastream
- 메모리계층
- 자료구조
- TDD란?
- tfjs
- 2623
- 백준 2133
- OpenVidu
- RBT
- 1796
- 3XN 타일링
- 데이터 링크 계층
- c++
- ESP32
- 구슬탈출
- Today
- Total
그냥 블로그
[ 백준/C++ ] 2468 안전 영역 본문
https://www.acmicpc.net/problem/2468
2468번: 안전 영역
재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는
www.acmicpc.net
드디어 DFS, BFS에 들어왔습니다 ~
C++로 한층 성장한 느낌
사실 예전에 파이썬으로 한번 풀었던 문제인데, 그때도 한 조건 때문에 화가 났던 기억이 있음 ㅋㅋㅋ
사실 BFS, DFS 만 할 줄 알면 굉장히 간단하게 풀리는 문제이다.
[해답 코드]
#include<bits/stdc++.h>
using namespace std;
int N;
int region[104][104];
int visited[104][104];
int dy[] = { -1, 1, 0, 0 };
int dx[] = { 0, 0, -1, 1 };
int DFS(int y, int x, int h) {
visited[y][x] = 1;
for(int i = 0; i< 4; i++){
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || nx < 0 || ny >= N || nx >= N) continue;
if (region[ny][nx] > h && !visited[ny][nx]) DFS(ny, nx, h);
}
return 0;
}
int main() {
cin >> N;
fill(®ion[0][0], ®ion[0][0]+104*104, 0);
int max_v = -1;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> region[i][j];
}
}
for (int h = 0; h <= 100; h++) {
int ans = 0;
fill(&visited[0][0], &visited[0][0] + 104 * 104, 0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (region[i][j] > h && !visited[i][j]) {
DFS(i, j, h);
++ans;
}
}
}
max_v = max(max_v, ans);
}
cout << max_v;
}
사실 별로 어렵지 않아서 쓸 말도 없는데 그래도 고찰을 써봅시다
[고찰]
1. if(X==N-1 && Y==N-1) return;
이 구문을 쓰지 말아야 하는데 처음엔 별 생각없이 쓰다가 써버렸다 히하ㅏ.. 미로찾기 효과인듯? 그래도 금방 눈치채고 바꾸긴 했다.
2. fill(&visited[0][0], &visited[0][0] + 104 * 104, 0);
배열을 초기화 하는 fill() 함수이다. 1차원 배열일 때는 [0][0] 식으로 하지 않고 visited, visited + 104*104가 가능한데 2차원 배열에서는 안되는 듯 하다. 이건 아마 참조? 쪽을 공부해야 알 것 같은데 일단은 넘어가고 C++ 이론을 다시 차근 차근 보도록하자
3. 배열을 틀리게 적었는데 왜 값이 들어가는 거죠 ????
처음에 104로 적어야 하는데 실수로 04로 적었음 ;;; 아니 그러면 INDEX 에러를 띄워줘야 하는게 아닌ㄴ가????? 근데 그냥 값이 들어간느데 틀린 값이 계속 들어가지는 거임... 그래서 값이 계속 다르게 나와서 고생을 했다 ㅠ 삽질했어
이제 논리에 에러가 없는데 안되면 진짜 처음부터 다시 쓰는 걸 항상 생각하도록 하자...
'C++ > 백준' 카테고리의 다른 글
[ 백준/C++ ] 2174 로봇 시뮬레이션 (1) | 2023.10.29 |
---|---|
[ 백준 / C++ ] 1181 단어 정렬 + sort() (1) | 2023.10.21 |
[ 백준/C++ ] 나는야 포켓몬 마스터 이다솜 (1) | 2023.10.10 |
[백준/C++] 2559 수열 (1) | 2023.10.08 |
[백준 / C++] 9996 한국이 그리울 땐 서버에 접속하지 (0) | 2023.10.04 |