Algorithm
-
[hacker rank] The bomberman game알고리즘/Hacker Rank 2021. 9. 10. 21:32
문제 링크 풀이 주어진 예제로 테스트 해보면 주기를 구할 수 있습니다. 3, 7, 11초..에 그리드의 형태가 같고, 5, 9, 13초..에 그리드의 형태가 같습니다. 첫 번째 주기는 폭발이 한 번 일어날 때며 두 번째 주기는 폭발이 두 번 일어날 때입니다. 이 규칙을 이용해 n의 크기를 줄여주면 됩니다. 코드 vector bomberMan(int n, vector grid) { vector 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; el..
-
[hacker rank] The grid search알고리즘/Hacker Rank 2021. 9. 10. 10:41
문제 링크 풀이 그리드 배열에서 패턴 배열의 첫 번째 요소과 일치하는 문자열의 위치를 찾을 때마다 나머지 패턴을 비교했습니다. 패턴 배열의 첫 번째 요소와 일치하는 그리드 배열의 행의 위치가 패턴 배열의 크기보다 작으면 탐색을 멈춥니다. 탐색을 멈출 때까지 return이 이뤄지지 않았다면 그리드 배열에서 패턴을 찾지 못한 것입니다. 코드 string gridSearch(vector G, vector P) { for (size_t i = 0; i G.size() - P.size()) break; size_t col = 0; while (true) { col = G[i].find(P[0], col); if (string::npos == col) break; e..
-
[hacker rank] The time in words알고리즘/Hacker Rank 2021. 9. 9. 22:29
문제 링크 코드 string timeInWords(int h, int m) { std::string time[] = { "o' clock", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "tweleve", "thirteen", "fourteen", "quarter", "sixteen", "seventeen", "eighteen", "nineteen", "twenty" }; const int size = 40; char buf[size] = {}; if (0 == m) snprintf(buf, size, "%s %s", time[h].c_str(), time[m].c_str()); else i..
-
[hacker rank] Organizing containers of balls알고리즘/Hacker Rank 2021. 9. 8. 14:25
문제 링크 풀이 현재 각 컨테이너에 있는 공의 개수와, 각 타입별 공의 개수를 비교해봅니다. 현황이 일치하면 됩니다. 예를 들어 컨테이너에 들어 있는 공 개수 배열이 {3, 2, 3}이고, 각 타입에 대한 개수 배열이 {2, 3, 3}이면 서로 계속 스왑을 한다고 해도 컨테이너에 들어 있는 공의 현황이 {3, 2, 3}인 건 바뀌지 않습니다. 때문에 개수에 대한 현황이 같기만 하다면, 스왑을 하다 보면 각기 다른 컨테이너에 같은 타입의 공을 모을 수 있습니다. 코드 string organizingContainers(vector container) { size_t size = container.size(); vector each_container(size, 0); vector each_type(size, ..