[๋ฌธ์ ]
[๋ฌธ์ ์ค๋ช
]
์ธ์ ํ ๋ ์นธ์ ๊ณจ๋ผ์ ์ฌํ์ ๊ตํํ ํ, ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ(ํ ๋๋ ์ด)์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
[๋ฌธ์ ํ์ด]
์ด ๋ฌธ์ ์ ํจ์ ์ ์๋ก ๋ค๋ฅธ ์๊น์ ์ธ์ ํ ๋ ์นธ์ด ์๋ ๊ฑ ์ธ์ ํ ๋ ์นธ์ด๋ผ๋ ์ ์ธ ๊ฒ ๊ฐ๋ค.
PPPP ์ฒ๋ผ ๊ตํํ์ง ์์ ๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ์ ๊ฐ์ง ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ ์ธ์ ํ ๋ ์นธ์ ์ ํํ๊ธฐ ์ํด int dir[2][2] = { {0,1},{1,0} } ์ค๋ฅธ์ชฝ๊ณผ ์๋์ ํด๋นํ๋ ๋ฐฉํฅํค ๋ฐฐ์ด์ ๋ง๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ 2์ค for๋ฌธ์ ์ฌ์ฉํด์ ๋ชจ๋ ์ขํ๋ฅผ ํ์ํด์คฌ๋ค.(brute force)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-1; j++) {
}
}
๊ทธ ๋ค์ ํ์๊ณผ์ ์ ์๋์ ๊ฐ๋ค.
1) (์ฌํ์ ์์ด ๋ค๋ฅธ) ์ธ์ ํ ๋ ์นธ์ ๊ณ ๋ฅธ๋ค.
for (int d = 0; d < 2; d++) {
int next_x = i + dir[d][0];
int next_y = j + dir[d][1];
}
2) ๊ณ ๋ฅธ ์นธ์ ๋ค์ด์๋ ์ฌํ์ ์๋ก ๊ตํํ๋ค.
swap(map[i][j], map[next_x][next_y]);
3) ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ(ํ ๋๋ ์ด)์ ์ฐพ๋๋ค.
2์ค for๋ฌธ ๋๊ฐ๋ก ํ ๊ณ์ฐ๊ณผ ์ด ๊ณ์ฐ์ ๋๋ค ํด์คฌ๋ค.
๊ฐ ํ์ ๊ณ์ฐํ ๋ถ๋ถ์ ๋ณด๋ฉด,
๊ฐ ํ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ฌ(0์ด)๋ฅผ ๋น๊ต ์ปฌ๋ฌ๋ก ๋๊ณ , ์์ ์ปฌ๋ฌ๊ฐ ๊ฐ์ผ๋ฉด ์ปฌ๋ฌ ๊ฐ์(count)๋ฅผ 1 ๋๋ ค์คฌ๋ค.
count = 1;
color = map[i][0];
if (map[i][j] == color) count++;
๋ง์ฝ ์์ ์ปฌ๋ฌ๊ฐ ๋ค๋ฅด๋ค๋ฉด, ํ์ฌ ์ปฌ๋ฌ๋ฅผ ๋ค์ ๋น๊ต์ปฌ๋ฌ๋ก ๋ฃ์ด์ฃผ๊ณ ์ปฌ๋ฌ ๊ฐ์๋ฅผ 1๋ก ์ด๊ธฐํํด์ฃผ๊ณ ํ์ฌ๊น์ง ๊ตฌํ count์ ์ต๋๊ฐ์ ๋น๊ตํด์ ๊ฐฑ์ ํด์ฃผ๊ณ ๋ค์ ํ์์ ์งํํ๋ค.
else {
color = map[i][j];
if (candy_max < count) candy_max = count;
count = 1;
}
๊ทธ๋ฆฌ๊ณ ํ ํ์ด ๋๋๋ ์ง์ ์ ์ฌํ ์๊น์ด ๊ฐ์ผ๋ฉด ์ต๋๊ฐ ๊ฐฑ์ ๋ถ๋ถ ์ง์
์ ๋ชปํ๋ ๊ฑธ ๋ฐฉ์งํ๋ ค๊ตฌ ๋ง์ง๋ง์ ํ๋ฒ ๋ ์ต๋๊ฐ์ ๋น๊ต๊ฐฑ์ ์คฌ๋ค.
if (candy_max < count) candy_max = count;
4) ๋ค์ ์ฌํ์ ๊ตํํด์ ์๋๋๋ก ๋ฐ๊ฟ๋๊ณ ์ฌํ์ํ๋ฉฐ ์ต๋๊ฐ์ ์ฐพ๋๋ค.
swap(map[i][j], map[next_x][next_y]);
5) ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
cout << candy_max << "\n";
[์ฝ๋]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void ChooseCandy(char **map, int n);
void CountCandy(char **map, int n);
int candy_max;
int main() {
int n = 0;//๋งต ํฌ๊ธฐ. 3 ≤ n ≤ 50
cin >> n;
//๋งต ๋์ ํ ๋น
char **map = new char*[n];
for (int i = 0; i < n; i++)
map[i] = new char[n];
//์ฌํ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
}
}
ChooseCandy(map, n);
cout << candy_max << "\n";
}
void ChooseCandy(char **map, int n) {
int dir[2][2] = { {0,1},{1,0} };//ํ์ฌ์นธ์ ์ค๋ฅธ์ชฝ๊ณผ ์๋์ชฝ์ ์ ํํ์ฌ ์์ด ๋ค๋ฅธ์ง ํ๋จํ ๊ฑฐ์ผ.
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-1; j++) {
//1. (์ฌํ์ ์์ด ๋ค๋ฅธ) ์ธ์ ํ ๋ ์นธ์ ๊ณ ๋ฅธ๋ค.
for (int d = 0; d < 2; d++) {
int next_x = i + dir[d][0];
int next_y = j + dir[d][1];
if (next_x >= 0 && next_x < n && next_y >= 0 && next_y < n) {
//2. ๊ณ ๋ฅธ ์นธ์ ๋ค์ด์๋ ์ฌํ์ ์๋ก ๊ตํํ๋ค.
swap(map[i][j], map[next_x][next_y]);
//3. ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ(ํ ๋๋ ์ด)์ ์ฐพ๋๋ค.
CountCandy(map, n);
//4. ๋ค์ ์ฌํ์ ๊ตํํด์ ์๋๋๋ก ๋ฐ๊ฟ๋๊ณ ์ฌํ์ํ๋ฉฐ ์ต๋๊ฐ์ ์ฐพ๋๋ค.
swap(map[i][j], map[next_x][next_y]);
}
}
}
}
}
void CountCandy(char **map, int n) {
char color;
int count;
//ํ ์นด์ดํธ
for (int i = 0; i < n; i++) {//ํ
count = 1;
color = map[i][0];//๊ฐ ํ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ฌ(0์ด)๋ฅผ ๋น๊ต ์ปฌ๋ฌ๋ก ๋๋ค.
for (int j = 1; j < n; j++) {//์ด
if (map[i][j] == color) count++;//์์ ์ปฌ๋ฌ๊ฐ ๊ฐ์ผ๋ฉด ์ปฌ๋ฌ ๊ฐ์(count)๋ฅผ 1 ๋๋ ค์ค๋ค.
else {//์์ ์ปฌ๋ฌ๊ฐ ๋ค๋ฅด๋ฉด, ํ์ฌ ์ปฌ๋ฌ๋ฅผ ๋ค์ ๋น๊ต์ปฌ๋ฌ๋ก ๋ฃ์ด์ฃผ๊ณ ์ปฌ๋ฌ ๊ฐ์๋ฅผ 1๋ก ์ด๊ธฐํํด์ค๋ค.
color = map[i][j];
if (candy_max < count) candy_max = count;//ํ์ฌ๊น์ง ๊ตฌํ count์ ์ต๋๊ฐ์ ๋น๊ตํด์ ๊ฐฑ์ ํด์ค๋ค.
count = 1;
}
}
if (candy_max < count) candy_max = count;//ํ ํ์ด ๋๋๋ ์ง์ ์ ์ฌํ ์๊น์ด ๊ฐ์ผ๋ฉด ์ else๋ฌธ์ ์ต๋๊ฐ ๊ฐฑ์ ๋ถ๋ถ ์ง์
์ ๋ชปํ๋ฏ๋ก, ๋ง์ง๋ง์ ํ๋ฒ๋ ์ต๋๊ฐ์ ๋น๊ต๊ฐฑ์ ํด์ค๋ค.
}
//์ด ์นด์ดํธ
for (int j = 0; j < n; j++) {//์ด
count = 1;
color = map[0][j];//๊ฐ ์ด์ ์ฒซ๋ฒ์งธ ์ปฌ๋ฌ(0ํ)๋ฅผ ๋น๊ต ์ปฌ๋ฌ๋ก ๋๋ค.
for (int i = 1; i < n; i++) {//ํ
if (map[i][j] == color) count++;//์๋์ ์ปฌ๋ฌ๊ฐ ๊ฐ์ผ๋ฉด ์ปฌ๋ฌ ๊ฐ์(count)๋ฅผ 1 ๋๋ ค์ค๋ค.
else {//์๋์ ์ปฌ๋ฌ๊ฐ ๋ค๋ฅด๋ฉด, ํ์ฌ ์ปฌ๋ฌ๋ฅผ ๋ค์ ๋น๊ต์ปฌ๋ฌ๋ก ๋ฃ์ด์ฃผ๊ณ ์ปฌ๋ฌ ๊ฐ์๋ฅผ 1๋ก ์ด๊ธฐํํด์ค๋ค.
color = map[i][j];
if (candy_max < count) candy_max = count;//ํ์ฌ๊น์ง ๊ตฌํ count์ ์ต๋๊ฐ์ ๋น๊ตํด์ ๊ฐฑ์ ํด์ค๋ค.
count = 1;
}
}
if (candy_max < count) candy_max = count;//ํ ์ด์ด ๋๋๋ ์ง์ ์ ์ฌํ ์๊น์ด ๊ฐ์ผ๋ฉด ์ else๋ฌธ์ ์ต๋๊ฐ ๊ฐฑ์ ๋ถ๋ถ ์ง์
์ ๋ชปํ๋ฏ๋ก, ๋ง์ง๋ง์ ํ๋ฒ๋ ์ต๋๊ฐ์ ๋น๊ต๊ฐฑ์ ํด์ค๋ค.
}
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON][C++][์๋ฎฌ๋ ์ด์ ] 16236๋ฒ ์๊ธฐ์์ด (0) | 2021.09.25 |
---|---|
[C++][ํ๋ก๊ทธ๋๋จธ์ค][Heap] ๋ ๋งต๊ฒ (0) | 2021.09.22 |
[C++][BEAKJOON][DP] ๋์ 1 (0) | 2021.09.21 |
[C++][BAEKJOON][์๋ฎฌ๋ ์ด์ ] 17144๋ฒ ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2021.09.19 |
[C++][BAEKJOON][DP] 9456๋ฒ ์คํฐ์ปค (0) | 2021.08.22 |