HappyCells
스트링 벡터가 입력으로 주어졌을때, 문자는 'X'이거나 '.'으로 들어온다. ('.'을 비어있는 셀이라고 하자)
'.'의 경우, 주변 셀들의 상태에 따라서 세가지 Happy셀임을 정의하는데 이는 다음과 같다:
{ "XXX",
"X.X",
"XXX }
= happy-1 (주변에 빈 셀이 없을때, 이는 {"."} 와 같이 주변 셀이 없을 때에도 성립한다)
{ "XXX",
"..X",
"XXX" }
= happy-2 (orthogonal한 위치의 셀이 비어있을 때, 즉, 빈 셀로부터 상, 하, 좌, 우에 빈 셀이 있는 경우이다)
{ ".XX",
"X.X",
"XXX" }
= happy-3 (diagonal한 위치의 셀이 비어있을 때, 즉, 빈 셀로부터 좌상, 우상, 좌하, 우하에 빈 셀이 있는 경우이다)
빈 셀이 있다면 경계값을 비교하면서 주변 셀들의 상태를 체크하는 것으로 해결했다. happy-2와 happy-3 상태가 아니라면 happy-1 상태이고, 만일 happy-2와 happy-3 상태를 모두 만족한다면 이는 happy하지 않다.
1 class HappyCells
2 {
3 public:
4 vector <int> getHappy(vector <string> grid)
5 {
6 int i, j;
7 vector <int> score(3);
8 int happy2 = 0;
9 int happy3 = 0;
10
11
12 for(i = 0; i < grid.size(); ++i)
13 {
14 for(j = 0; j < grid[i].size(); ++j)
15 {
16 happy2 = 0;
17 happy3 = 0;
18 if(grid[i][j] == '.')
19 {
20 if((i > 0 && j > 0 &&
21 grid[i-1][j-1] == '.') ||
22 (i > 0 && j < grid[i].size()-1 &&
23 grid[i-1][j+1] == '.') ||
24 (i < grid.size()-1 && j > 0 &&
25 grid[i+1][j-1] == '.') ||
26 (i < grid.size()-1 && j < grid[i].size()-1 &&
27 grid[i+1][j+1] == '.')
28 )
29 happy2 = 1;
30
31 if((i > 0 && grid[i-1][j] == '.') ||
32 (j > 0 && grid[i][j-1] == '.') ||
33 (i < grid.size()-1 && grid[i+1][j] == '.') ||
34 (j < grid[i].size()-1 && grid[i][j+1] == '.'))
35 happy3 = 1;
36
37 if(happy2 && happy3) continue;
38 else if(happy2) ++score[1];
39 else if(happy3) ++score[2];
40 else ++score[0];
41 }
42 }
43 }
44
45 return score;
46 }
47 };
2 {
3 public:
4 vector <int> getHappy(vector <string> grid)
5 {
6 int i, j;
7 vector <int> score(3);
8 int happy2 = 0;
9 int happy3 = 0;
10
11
12 for(i = 0; i < grid.size(); ++i)
13 {
14 for(j = 0; j < grid[i].size(); ++j)
15 {
16 happy2 = 0;
17 happy3 = 0;
18 if(grid[i][j] == '.')
19 {
20 if((i > 0 && j > 0 &&
21 grid[i-1][j-1] == '.') ||
22 (i > 0 && j < grid[i].size()-1 &&
23 grid[i-1][j+1] == '.') ||
24 (i < grid.size()-1 && j > 0 &&
25 grid[i+1][j-1] == '.') ||
26 (i < grid.size()-1 && j < grid[i].size()-1 &&
27 grid[i+1][j+1] == '.')
28 )
29 happy2 = 1;
30
31 if((i > 0 && grid[i-1][j] == '.') ||
32 (j > 0 && grid[i][j-1] == '.') ||
33 (i < grid.size()-1 && grid[i+1][j] == '.') ||
34 (j < grid[i].size()-1 && grid[i][j+1] == '.'))
35 happy3 = 1;
36
37 if(happy2 && happy3) continue;
38 else if(happy2) ++score[1];
39 else if(happy3) ++score[2];
40 else ++score[0];
41 }
42 }
43 }
44
45 return score;
46 }
47 };



최근 덧글