Level 2. 하노이의 탑 유명하고 전형적인 하노이의 탑 알고리즘이다. 3개를 A에서 B를 거쳐 C로 옮긴다고 할 때, A에 있는 2개를 C를 거쳐 B로 옮긴다. A에 남은 1개를 C로 옮긴다. 1단계에서 B로 옮겼던 2개를 A를 거쳐 C로 옮긴다. #include #include #include using namespace std; vector solution(int n, int from, int through, int to) { if (n == 1) return {{from, to}}; vector result = solution(n - 1, from, to, through); result.emplace_back(vector{from, to}); vector t = solution(n - 1, th..
Level 2. 모음사전 #include using namespace std; bool rDFS(string s, string& word, int& answer) { const static string alphabets[] = {"A", "E", "I", "O", "U"}; ++answer; if (s == word) return true; else if (s.length() == 5) return false; for (const string& alpha : alphabets) if (rDFS(s + alpha, word, answer)) return true; return false; } int solution(string word) { int answer = 0; const string alphabe..
Level 2. 멀쩡한 사각형 대각선을 일차 함수로 생각해 int 형변환으로 소숫점을 날리면서 더하면 된다. #include #define f(x) int(a * (x) + b) using namespace std; long long solution(int w, int h) { long long answer = 0; double b = h, a = -(b / w); for (int x = 1; x
Level 2. 행렬 테두리 회전하기 GetBorder()라는 테두리를 이루는 원소들의 포인터를 저장하는 함수를 만들고, rotate() 함수를 활용해 배열을 1칸 밀어 해결했다. #include #include #include using namespace std; vector GetBorder(vector& nxn, vector& query) { int x1 = query[0], y1 = query[1]; int x2 = query[2], y2 = query[3]; int r = x1, c = y1; int n = 0; vector v((x2 - x1 + y2 - y1) * 2); while (c < y2) v[n++] = &nxn[r][c++]; while (r < x2) v[n++] = &nxn[r..
Level 0. 수열과 구간 쿼리 4 i를 1씩 증가시키며 매번 모듈러 연산을 하는 것보다는, s보다 크거나 같은 가장 작은 k를 먼저 구해 놓고 k씩 e까지 더하는 게 더 효율적이다. #include #include using namespace std; vector solution(vector arr, vector queries) { for (vector& query : queries) for (int i = (query[0] + query[2] - 1) / query[2] * query[2]; i
Level 2. 소수 찾기 뭔가 복잡한 코드를 짜서 어딘가에선 오류가 발생할 줄 알았는데, 바로 통과해서 당황했다. next_permutation() 함수와 비트 마스킹을 활용해 순열과 조합을 만들었다. #include #include #include #include #include #include using namespace std; vector C(vector& v, int n, int r) { set st; vector bitMask(n, 0); fill(bitMask.end() - r, bitMask.end(), 1); do { vector t; for (auto it = find(bitMask.begin(), bitMask.end(), 1); it != bitMask.end(); it = fin..