-
[hacker rank] The bomberman game알고리즘/Hacker Rank 2021. 9. 10. 21:32
풀이
주어진 예제로 테스트 해보면 주기를 구할 수 있습니다. 3, 7, 11초..에 그리드의 형태가 같고, 5, 9, 13초..에 그리드의 형태가 같습니다. 첫 번째 주기는 폭발이 한 번 일어날 때며 두 번째 주기는 폭발이 두 번 일어날 때입니다. 이 규칙을 이용해 n의 크기를 줄여주면 됩니다.
코드
vector<string> bomberMan(int n, vector<string> grid) { vector<pair<size_t, size_t>> pos; if (0 == n % 2) { for (size_t i = 0; i < grid.size(); ++i) for (size_t j = 0; j < grid[i].size(); ++j) grid[i][j] = 'O'; return grid; } else if ((n + 1) % 4 == 0) n = 3; else if (n != 1 && (n - 1) % 4 == 0) n = 5; for (size_t t = 2; t <= n; ++t) { if (0 == t % 2) { for (size_t i = 0; i < grid.size(); ++i) { for (size_t j = 0; j < grid[i].size(); ++j) { if ('O' == grid[i][j]) pos.push_back({ i, j }); else grid[i][j] = 'O'; } } } else { for (size_t i = 0; i < pos.size(); ++i) { size_t r = pos[i].first; size_t c = pos[i].second; grid[r][c] = '.'; if (r > 0) grid[r - 1][c] = '.'; if (c > 0) grid[r][c - 1] = '.'; if (r < grid.size() - 1 ) grid[r + 1][c] = '.'; if (c < grid[r].size() - 1) grid[r][c + 1] = '.'; } pos.clear(); } } return grid; }
'알고리즘 > Hacker Rank' 카테고리의 다른 글
[hacker rank] The grid search (0) 2021.09.10 [hacker rank] The time in words (0) 2021.09.09 [hacker rank] Encryption (0) 2021.09.09 [hacker rank] Organizing containers of balls (0) 2021.09.08 [hacker rank] Extra long factorial (0) 2021.09.07