<C/C++> BOJ 14500: ํ
ํธ๋ก๋ฏธ๋
ธ
Coding Test
2022. 3. 31. 01:04
https://www.acmicpc.net/problem/14500
14500๋ฒ: ํ ํธ๋ก๋ฏธ๋ ธ
ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค. ์ ์ฌ๊ฐํ์ ์๋ก ๊ฒน์น๋ฉด ์ ๋๋ค. ๋ํ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค. ์ ์ฌ๊ฐํ์ ๋ณ
www.acmicpc.net
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define MAXN 500
int N, M;
int sol, mx;
int map[MAXN + 10][MAXN + 10];
int visited[MAXN + 10][MAXN + 10];
static int dr[] = { -1, 1, 0, 0 };
static int dc[] = { 0, 0, -1, 1 };
static int tet[][3] = { {0, 1, 2}, {1, 2, 3}, {0, 1, 3}, {0, 2, 3} };
void Input(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
if (mx < map[i][j]) mx = map[i][j];
}
}
}
void DFS(int r, int c, int t, int sum) {
int nr, nc;
if (t >= 4) {
if (sol < sum) sol = sum;
return;
}
if (sol >= mx*(4 - t) + sum) return;
for (int i = 0; i < 4; i++) {
nr = r + dr[i], nc = c + dc[i];
if (visited[nr][nc]) continue;
if (nr >= N || nr < 0 || nc >= M || nc < 0) continue;
visited[nr][nc] = 1;
DFS(nr, nc, t + 1, sum + map[nr][nc]);
visited[nr][nc] = 0;
}
}
void check() {
int sum, nr, nc, dir;
for (int i = 0; i < N; i++) { //ํจ์จ ๋์ด๋ ค๊ณ ๋ฒ์ ์ค์๋ค๊ฐ ํ
์ผ ํต๊ณผ๋ ๋ชปํ๊ฒ ๋๋ฌด ์ค์
for (int j = 0; j < M; j++) {
for (int k = 0; k < 4; k++) {
sum = map[i][j];
for (int idx = 0; idx < 3; idx++) {
dir = tet[k][idx];
nr = i + dr[dir], nc = j + dc[dir];
if (nr >= N || nr < 0 || nc >= M || nc < 0) break;
sum += map[nr][nc];
}
if (sol < sum) sol = sum;
}
}
}
}
int main(void) {
Input();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
visited[i][j] = 1;
DFS(i, j, 1, map[i][j]);
visited[i][j] = 0;
}
}
check();
cout << sol << endl;
return 0;
}
DFS ์ฌ์ฉ
๋จ 'ใ
'๋ชจ์์ DFS๋ก ํ ๋ฐฉ๋ฒ ๋ชป์ฐพ๊ฒ ์ด์ ์์ธ๋ก check ํจ์ ๋ง๋ค์์
์ฌ๊ธฐ์ ํจ์จ ๋์ด๋ ค๋ค๊ฐ ๋ฒ์ ์กฐ์ ์ค์ํจ. ์์ง์ผ์ด์ค๋ค ์ ์ก์๋ด์!
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
<C/C++> BOJ 14888: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2022.04.02 |
---|---|
<C/C++> BOJ 14503 ๋ก๋ด์ฒญ์๊ธฐ (0) | 2022.04.02 |
<C/C++> BOJ 13458 ์ํ๊ฐ๋ (0) | 2022.03.30 |
<C/C++> BOJ 14499: ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.03.30 |
<C/C++> BOJ 13460: ๊ตฌ์ฌํ์ถ (0) | 2022.03.29 |