์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ์ด์ฌ
- ์ ๋ ฌ
- ์ฐ์ ์์ํ
- SQL
- BFS
- ๋๋น์ฐ์ ํ์
- DFS
- ๊ทธ๋ํ
- DP
- skala
- ๋์ ๊ณํ๋ฒ
- ๊ทธ๋ํํ์
- ์ค๋ธ์
- ๋จธ์ง์ํธ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ๊น์ด์ฐ์ ํ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๊ณ ๋ฆฌ์ฆ
- db
- ๊ทธ๋ฆฌ๋
- ๋์ ํฉ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์์ํ์
- skala1๊ธฐ
- ๋ฐฑ์ค
- LIS
- ๋ณํฉ์ ๋ ฌ
- ๊ตฌํ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ํ
- Today
- Total
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[ํ๋ก๊ทธ๋๋จธ์ค] [PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ - C++ ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] [PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ - C++
.23 2025. 3. 17. 21:55๋ฌธ์
๐ ํ๋ก๊ทธ๋๋จธ์ค - [PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
์ธ๋ก๊ธธ์ด๊ฐ n ๊ฐ๋ก๊ธธ์ด๊ฐ m์ธ ๊ฒฉ์ ๋ชจ์์ ๋ ์์์ ์์ ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค. ์์ ๋ ์ฌ๋ฌ ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด ๋ฌปํ์์ต๋๋ค. ๋น์ ์ด ์์ถ๊ด์ ์์ง์ผ๋ก ๋จ ํ๋๋ง ๋ซ์ ์ ์์ ๋, ๊ฐ์ฅ ๋ง์ ์์ ๋ฅผ ๋ฝ์ ์ ์๋ ์์ถ๊ด์ ์์น๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค. ์์ถ๊ด์ ์ด ํ๋๋ฅผ ๊ดํตํ๋ ํํ์ฌ์ผ ํ๋ฉฐ, ์ด๊ณผ ์ด ์ฌ์ด์ ์์ถ๊ด์ ๋ซ์ ์ ์์ต๋๋ค.

์๋ฅผ ๋ค์ด ๊ฐ๋ก๊ฐ 8, ์ธ๋ก๊ฐ 5์ธ ๊ฒฉ์ ๋ชจ์์ ๋ ์์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ์์ ๊ฐ ๋ฐ๊ฒฌ๋์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋ ์์ ๋ ํ๋์ ๋ฉ์ด๋ฆฌ์ด๋ฉฐ, ์์ ๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ ๋ฉ์ด๋ฆฌ์ ํฌํจ๋ ์นธ์ ์์ ๋๋ค. ๊ทธ๋ฆผ์์ ์์ ๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ ์ผ์ชฝ๋ถํฐ 8, 7, 2์ ๋๋ค.

์์ถ๊ด์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ค์นํ ์์น ์๋๋ก ๋๊น์ง ๋ป์ด๋๊ฐ๋๋ค. ๋ง์ฝ ์์ถ๊ด์ด ์์ ๋ฉ์ด๋ฆฌ์ ์ผ๋ถ๋ฅผ ์ง๋๋ฉด ํด๋น ๋ฉ์ด๋ฆฌ์ ์ํ ๋ชจ๋ ์์ ๋ฅผ ๋ฝ์ ์ ์์ต๋๋ค. ์์ถ๊ด์ด ๋ฝ์ ์ ์๋ ์์ ๋์ ์์ถ๊ด์ด ์ง๋๋ ์์ ๋ฉ์ด๋ฆฌ๋ค์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ํฉํ ๊ฐ์ ๋๋ค. ์์ถ๊ด์ ์ค์นํ ์์น์ ๋ฐ๋ผ ๋ฝ์ ์ ์๋ ์์ ๋์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ 7๋ฒ ์ด์ ์์ถ๊ด์ ์ค์นํ๋ฉด ํฌ๊ธฐ๊ฐ 7, 2์ธ ๋ฉ์ด๋ฆฌ์ ์์ ๋ฅผ ์ป์ด ๋ฝ์ ์ ์๋ ์์ ๋์ด 9๋ก ๊ฐ์ฅ ๋ง์ต๋๋ค.
์์ ๊ฐ ๋ฌปํ ๋ ๊ณผ ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ์ ์ ๋ฐฐ์ด land๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ์์ถ๊ด ํ๋๋ฅผ ์ค์นํด ๋ฝ์ ์ ์๋ ๊ฐ์ฅ ๋ง์ ์์ ๋์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ
์ ํ์ฌํญ
1 โค land์ ๊ธธ์ด = ๋ ์ ์ธ๋ก๊ธธ์ด = n โค 500
ยท 1 โค land[i]์ ๊ธธ์ด = ๋ ์ ๊ฐ๋ก๊ธธ์ด = m โค 500
ยท land[i][j]๋ i+1ํ j+1์ด ๋ ์ ์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
ยท land[i][j]๋ 0 ๋๋ 1์ ๋๋ค.
ยท land[i][j]๊ฐ 0์ด๋ฉด ๋น ๋ ์, 1์ด๋ฉด ์์ ๊ฐ ์๋ ๋ ์ ์๋ฏธํฉ๋๋ค.
์ ํ์ฑ ํ ์คํธ ์ผ์ด์ค ์ ํ์ฌํญ
1 โค land์ ๊ธธ์ด = ๋ ์ ์ธ๋ก๊ธธ์ด = n โค 100
ยท 1 โค land[i]์ ๊ธธ์ด = ๋ ์ ๊ฐ๋ก๊ธธ์ด = m โค 100
ํจ์จ์ฑ ํ ์คํธ ์ผ์ด์ค ์ ํ์ฌํญ
์ฃผ์ด์ง ์กฐ๊ฑด ์ธ ์ถ๊ฐ ์ ํ์ฌํญ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์

๊ฐ๋จํ? ๊ทธ๋ฌ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ์ ๋ชจ๋ ๊ณ ๋ คํ์ ๋ ์๊ฐํด์ค์ผ ํ ๋ถ๋ถ์ด ๋ง์์ ๊ธฐ๋กํด๋๋ ๋ฌธ์ .
์ฒ์ ์์ด๋์ด๋ ๋น์ฐํ ๊ฐ ์ด๋ณ BFS ํ์์ ์งํ ํ ์ต๋ ์์ญ์ ๋น๊ตํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด ๋ปํ๋,
1. 1ํ BFS ํ์ํ์ฌ ์ธ์ ํ ์์ ๋ฉ์ด๋ฆฌ๋ ๊ทธ๋ฃน๋ณ๋ก ๋ฌถ๋๋ค.
2. ๋ฉ์ด๋ฆฌ ๋ณ ํฌ๊ธฐ๋ map์ ํตํด ์ ์ฅํด์ค๋ค.
3. ์ด๋ณ ํ์์ ์งํํ๋ฉด์ ๊ทธ๋ฃน์ set์ผ๋ก ์ธ์ด ์ค๋ณต์ ์์ค ํ ๋ํ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ค.
์๋๋ฐ, ๊ณ์ ํจ์จ์ฑ ๋ถ๋ถ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋๋ผ(์ฌ์ค ์ ํ๋๋ง land ํฌ๊ธฐ๊ฐ 100์ด๊ณ ํจ์จ์ฑ์ 500์ธ๊ฑธ ์๋ด์ segmentation fault๊ฐ ๋๋ง์ด ๋ธ)
๊ทธ๋์ ๊ณ์ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ค๊ฐ ๋ฐฐ์ด ์ ๋ค ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Lessons learned
- C++์ map๊ณผ set์ ์ฐ์ฐ ์๋๋ log N โ map<int, int>๋ก ์ธ๊ฑฐ๋ฉด ์ฐจ๋ผ๋ฆฌ ํ์ํ ์๋ฃ๊ตฌ์กฐ์ ํฌ๊ธฐ๋งํผ ๋ฏธ๋ฆฌ ์ ์ํด๋๊ณ (์ฌ๊ธฐ์๋ ๊ฐ๊ฐ R * C + 1, group_id + 1) ์ ๊ทผํ๋ฉด O(1)๋ก ์๊ฐ ๋จ์ถ ๊ฐ๋ฅ
- ์ฝ๊ธฐ๋ง ํ์ํ ๋ฐฐ์ด(vector)์ ํจ์์ parameter๋ก ๋๊ฒจ์ค๊ฑฐ๋ฉด, ์ฐจ๋ผ๋ฆฌ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐฉ์(call-by-value) ๋ณด๋ค๋ '์ฐธ์กฐ ๊ธฐ๋ฐ' ์ ๋ฌ(call-by-reference)๋ก ์์
vector<vector<int> > land โ const vector<vector<int>>& land
์ค์ ๋ก ์ฒซ๋ฒ์งธ๊ฑฐ๋ง ์์ ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋๋ฐ,
์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๋๊น ๋ฐ๋ก ํต๊ณผํ๋ค..ใ ใ
๊ณต๋ถ์ ๋์ด์๋ค..
์ฝ๋
#include <string>
#include <vector>
#include <queue>
#define MAX 501
using namespace std;
bool visited[MAX][MAX] = { false };
int graph[MAX][MAX] = { 0 };
int dy[] = { 1, -1, 0, 0 };
int dx[] = { 0, 0, 1, -1 };
int BFS(int start_r, int start_c, int group_id, vector<vector<int> >& land) {
queue<pair<int, int> > q;
int r = land.size();
int c = land[0].size();
int group_cnt = 1;
visited[start_r][start_c] = true;
q.push(make_pair(start_r, start_c));
while(!q.empty()) {
int nr = q.front().first;
int nc = q.front().second;
graph[nr][nc] = group_id;
q.pop();
for(int i = 0; i < 4; i++) {
if(nr + dy[i] < 0 || nr + dy[i] >= r || nc + dx[i] < 0 || nc + dx[i] >= c) continue;
if(!visited[nr + dy[i]][nc + dx[i]] && land[nr + dy[i]][nc + dx[i]] == 1) {
visited[nr + dy[i]][nc + dx[i]] = true;
q.push(make_pair(nr + dy[i], nc + dx[i]));
group_cnt++;
}
}
}
return group_cnt;
}
int solution(vector<vector<int>> land) {
int answer = 0;
int r = land.size();
int c = land[0].size();
vector<int> group(r * c + 1, 0);
int group_id = 0;
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
if(land[i][j] == 1 && !visited[i][j]) {
group_id++;
group[group_id] = BFS(i, j, group_id, land);
}
}
}
int max = 0;
for(int j = 0; j < c; j++) {
int count = 0;
vector<bool> group_visited(group_id + 1, false);
for(int i = 0; i < r; i++) {
int gid = graph[i][j];
if(gid != 0 && !group_visited[gid]) {
count += group[gid];
group_visited[gid] = true;
}
}
max = max < count ? count : max;
}
return max;
}
'์ฝ๋ฉํ ์คํธ ์ค๋น > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ต์ ์ ๋ณ ๋ง๋ค๊ธฐ - ํ์ด์ฌ (0) | 2024.11.17 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ - ํ์ด์ฌ (1) | 2024.11.14 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์ - C++ (0) | 2024.11.12 |
[ํ๋ก๊ทธ๋๋จธ์ค] N-Queen - C++ (0) | 2024.11.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌํ๊ฒฝ๋ก - C++ (0) | 2024.11.08 |