โท ๋ฌธ์ ์ค๋ช
NxM ํฌ๊ธฐ์ ์ข ์ด ์์ ํ ํธ๋ก๋ฏธ๋ ธ๋ฅผ ํ๋ ๋์์ ๋์ธ ์นธ์ ์ฐ์ฌ ์๋ ์์ ํฉ์ ์ต๋๋ก ํ๋ ๋ฌธ์
N, M์ ๋ฒ์๋ 4 <= N, M <= 500 ์ด๋ค.
โท ๋ฌธ์ ํ์ด
ํ ํธ๋ก๋ฏธ๋ ธ๋ฅผ ํ์ ๋ฐ ๋์นญํ์ฌ ๋ฏธ๋ฆฌ ํ๋ ฌ๋ก ํํ(19๊ฐ)ํ๊ณ NxM ์ข ์ด ์์ ๋๊ณ MAX ๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ค.
์ฆ,
(0,0) | (0,1) | (0,2) | (0,3) |
=> {{0,0}, {0,1}, {0,2}, {0,3}}
1) ์์ ๊ฐ์ด ๋์ ์ ์๋ ํ ํธ๋ก๋ฏธ๋ ธ๋ฅผ 3์ฐจ ํ๋ ฌ๋ก ํํํ๋ค. ํ์ ๋ฐ ๋์นญ์ ํฌํจํด์ ์ด 19๊ฐ
2) NxM ์ข ์ด์ 0,0 ์ขํ๋ถํฐ ํ์์ ์์ํ๋ค.
3) ํ๋ ฌ๋ก ํํํ ํ ํธ๋ก๋ฏธ๋ ธ 19๊ฐ ์ค ํ๋๋ฅผ ์ ํํด์ NxM ์ข ์ด์ ๋๋๋ค.
4) ์ด ๋, ํ ํธ๋ก๋ฏธ๋ ธ๋ฅผ ํ ์ขํ์ฉ ๋์ผ๋ฉด์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ๊ณณ์ด ํ๋ ฌ์ x, y๊ฐ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋์ง ํ์ธํ๋ค.
5) ๋ฒ์ ์์ ์์ผ๋ฉด ํ ์ขํ์ฉ SUM๊ฐ์ ์ ์ฅํ๋ค.
6) 4์นธ ๋ชจ๋ ํ๋ ฌ์ ๋์์ง๋ฉด SUM๊ฐ๊ณผ MAX๊ฐ์ ๋น๊ตํ๋ค.
6) ๋ง์ง๋ง ์ขํ๊น์ง ํ์ธํ๊ณ ์ต์ข MAX๊ฐ์ ์ถ๋ ฅํ๋ค.
โท ์๊ฐ๋ณต์ก๋
ํ ํธ๋ก๋ฏธ๋ ธ๋ ์ด 19๊ฐ์ง๊ฐ ์๊ณ , ํ๋์ ํ ํธ๋ก๋ฏธ๋ ธ๋น ๋์ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ฐ์๋ ์ฝ O(NM)๊ฐ์ง์ด๋ค.
์ฆ, NxM ์ข ์ด์ 19๊ฐ์ ๋ํ์ ์ฌ๋ฆฌ๋ ๊ฒฝ์ฐ์ ์๋ O(19*N*M) = O(N^2)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
โท ์ ๋ต์ฝ๋
#include <iostream>
#include<algorithm>
#define SIZE 500
using namespace std;
void Input();
void StartCalculation(int arr[SIZE][SIZE], int N, int M);
int main() {
Input();
}
void Input() {
int N, M;
int arr[SIZE][SIZE] = { {0,0}, };
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> arr[i][j];
}
}
StartCalculation(arr, N, M);
}
void StartCalculation(int arr[SIZE][SIZE], int N, int M) {
int tetro[19][4][2] = {
// โกโกโกโก
{{0,0}, {0,1}, {0,2}, {0,3}},
{{0,0}, {1,0}, {2,0}, {3,0}},
// โกโก
// โกโก
{{0,0}, {1,0}, {0,1}, {1,1}},
// โก
// โก
// โกโก
{{0,0}, {1,0}, {2,0}, {2,1}},
{{0,0}, {1,0}, {0,1}, {0,2}},
{{0,0}, {0,1}, {1,1}, {2,1}},
{{0,0}, {1,0}, {2,0}, {2,-1}},
{{0,0}, {0,1}, {0,2}, {-1,2}},
{{0,0}, {1,0}, {2,0}, {0,1}},
{{0,0}, {1,0}, {1,1}, {1,2}},
{{0,0}, {0,1}, {0,2}, {1,2}},
// โก
// โกโก
// โก
{{0,0}, {1,0}, {1,1}, {2,1}},
{{0,0}, {1,0}, {-1,1} , {0,1}},
{{0,0}, {0,1}, {-1,1}, {-1,2}},
{{0,0}, {0,1}, {1,1}, {1,2}},
// โกโกโก
// โก
{{0,0}, {0,1}, {0,2}, {1,1}},
{{0,0}, {1,-1}, {1,0}, {1,1}},
{{0,0}, {1,0}, {2,0}, {1,1}},
{{0,0}, {1,0}, {2,0}, {1,-1}},
};
int answer = 0;
for (int i = 0; i < N; i++) {//Nํ
for (int j = 0; j < M; j++) {//M์ด
for (int k = 0; k < 19; k++) {//๋ชจ์ 19๊ฐ ํ๋์ฉ ์ ํํ๊ธฐ
int sum = 0;
for (int l = 0; l < 4; l++) {//์ ํํ ๋ธ๋ญ๋ชจ์ ํ ์นธ์ฉ ๊ฐ ๋ํ๊ธฐ
int x = i + tetro[k][l][0];//ํ์ฌ ์์น์ x๊ฐ + k๋ชจ์ 1์นธ์ ํด๋นํ๋ x๊ฐ
int y = j + tetro[k][l][1];//ํ์ฌ ์์น์ y๊ฐ + k๋ชจ์ 1์นธ์ ํด๋นํ๋ y๊ฐ
if (0 <= x && N > x && 0 <= y && M > y) {//x,y๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋์ง ํ์ธ
sum += arr[x][y];//๋ฒ์์์ ์์ผ๋ฉด sum๊ฐ์ผ๋ก ๋ํ๊ธฐ
}
else {//๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฒ๋ฆฌ๋ฉด ๋ฐ๋ก ๋์์ ๋ค์ ๋ชจ์ ํ์ํ๊ธฐ
break;
}
}
answer = max(answer, sum);//์ ์์ ์ผ๋ก ๋ํ ๊ฐ์ด ํ์ฌ๊น์ง์ max ๊ฐ๋ณด๋ค ํฌ๋ฉด ๊ฐ ์ฒด์ธ์ง
}
}
}
cout << answer << '\n';
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon][C++] 1759๋ฒ ์ํธ ๋ง๋ค๊ธฐ ๋ฌธ์ ์ค๋ช ๋ฐ ์ฝ๋ (0) | 2021.04.17 |
---|---|
[Baekjoon][C++] 2667๋ฒ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ ๋ฌธ์ ์ค๋ช ๋ฐ ์ฝ๋ (0) | 2021.04.17 |
[Baekjoon][C++] 9095๋ฒ 1, 2, 3 ๋ํ๊ธฐ ๋ฌธ์ ์ค๋ช ๋ฐ ์ฝ๋ (0) | 2021.03.07 |
[Baekjoon][C++] 1476๋ฒ ๋ ์ง๊ณ์ฐ ๋ฌธ์ ์ค๋ช ๋ฐ ์ฝ๋ (0) | 2021.03.03 |
[Baekjoon][C++] 2309๋ฒ ์ผ๊ณฑ๋์์ด ๋ฌธ์ ์ค๋ช ๋ฐ ์ฝ๋ (0) | 2021.03.03 |