알고리즘/BOJ 1235

백준 4383번 점프는 즐거워

문제 링크입니다: https://www.acmicpc.net/problem/4383 정말 쉬운 문제인데 EOF 처리 실수 때문에 계속 틀렸던 문제였습니다. #include #include #include using namespace std; const int MAX = 3000; int arr[MAX]; bool visited[MAX]; int main(void) { int N; while (scanf("%d", &N) != EOF) { memset(visited, false, sizeof(visited)); for (int i = 0; i > arr[i]; bool flag = true; for (int i = 0; i < N - 1; i++) { int diff = abs(..

알고리즘/BOJ 2019.01.24

백준 2253번 점프

문제 링크입니다: https://www.acmicpc.net/problem/2253 오랜만에 다이나믹 프로그래밍 문제였습니다. 알고리즘은 아래와 같습니다.1. N의 범위는 최대 10000이고 M의 범위는 대략 log(N) + α 이기 때문에 캐시 배열을 [10000+1][250] 정도로 잡아줬습니다.-> (k)(k+1)/2 N >> M; for (int i = 0; i > num; rock[num] = true; } memset(cache, -1, sizeof(cache)); int result = jump(1, 0); if (success) cout

알고리즘/BOJ 2019.01.24

백준 9207번 페그 솔리테어

문제 링크입니다: https://www.acmicpc.net/problem/9207 재미있는 브루트 포스(Brute Force), 백트래킹 문제였습니다. 알고리즘은 아래와 같습니다.1. o의 개수를 무한대로 초기화하고 DFS 함수를 호출합니다.2. 모든 칸을 살피며 o를 찾고 해당 o의 인접한 칸에 또 o가 있고 인접한 칸의 다음 칸이 비어있다면 문제의 규칙에 따라 인접한 칸의 o를 제거하고 비어있는 칸으로 이동한 뒤 DFS 함수를 또 재귀 호출합니다.3. 모든 칸을 살폈는데도 움직일 o가 없다면 더 이상 진행할 수 없으므로 현재 보드에 있는 o의 개수를 세고 o의 개수와 최소횟수를 업데이트 해줍니다. #include #include #include using namespace std; const int..

알고리즘/BOJ 2019.01.22

백준 10162번 전자레인지

문제 링크입니다: https://www.acmicpc.net/problem/10162 간단한 BFS(Breadth First Search) 알고리즘 문제였습니다. #include #include using namespace std; const int MAX = 10000 + 1; bool visited[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int T; cin >> T; queue q; q.push({ T, {0, {0, 0}} }); visited[T] = true; while (!q.empty()) { int time = q.front().first; int A = q.front().second.first; int B = q..

알고리즘/BOJ 2019.01.20

백준 14956번 Philosopher's Walk

문제 링크입니다: https://www.acmicpc.net/problem/14956 문제에서 나오는 모양을 Hilbert Curve라고 합니다.Hilbert Curve에 관해서는 http://datagenetics.com/blog/march22013/index.html에 잘 나와있습니다.기존의 쿼드트리(http://jaimemin.tistory.com/1072) 문제처럼 분할정복을 이용해 재귀호출을 하면 되는 문제였지만 우하단이 계산하기 매우 까다로운 문제였습니다.자세한 내용을 쓰기보다는 직접 코드를 확인하는 것이 훨씬 도움될 것 같습니다! (https://baaaaaaaaaaaaaaaaaaaaaaarkingdog.tistory.com/401)님의 코드가 많은 도움이 됐습니다! #include #inc..

알고리즘/BOJ 2019.01.20

백준 16720번 BAZE RUNNER

문제 링크입니다: https://www.acmicpc.net/problem/16720 간단한 브루트 포스(Brute Force) 문제였습니다. 알고리즘은 아래와 같습니다.1. 벽을 움직이는 횟수와 상관 없이 오른쪽으로 3칸, 아래로 (N - 1)칸 가는 것은 고정이기 때문에 결과는 (N + 2)로 시작합니다.2. 벽을 얼만큼 밀지를 결정하는데 각 높이마다 최대 2번 움직입니다.-> 이유는 3번 움직일 경우 반대 방향으로 1번만 움직이면 되기 때문입니다.3. 벽을 민 횟수 + (N + 2)를 출력해줍니다. #include #include using namespace std; const int MAX = 1000; const int INF = 987654321; int col[MAX]; int main(vo..

알고리즘/BOJ 2019.01.20

백준 1759번 암호 만들기

문제 링크입니다: https://www.acmicpc.net/problem/1759 C와 L의 범위가 작기 때문에 브루트 포스(Brute Force)로 풀 수 있었던 문제였습니다. 알고리즘은 아래와 같습니다.1. 알파벳을 입력받고 모음과 자음으로 나눕니다.2. 재귀 함수 호출을 이용해 모든 조합을 시도하는데 만들어진 문자열의 길이가 L이고 모음이 적어도 하나 있고 자음이 적어도 두개가 있으며 사전순으로 정렬했을 때 아직 result 벡터에 넣지 않은 문자열일 경우에만 result 벡터에 추가합니다.3. result 벡터를 사전순으로 정렬하고 출력해줍니다. #include #include #include #include #include using namespace std; const int MAX = 15..

알고리즘/BOJ 2019.01.20