분류 전체보기
-
백준(C++) 2178 [미로탐색]알고리즘(백준) 2024. 10. 4. 01:16
https://www.acmicpc.net/problem/2178접근방법미로탐색 문제는 너비 우선 탐색을 이용하여 푸는 문제이다. 너비 우선 탐색(BFS)는 모든 길을 한번 씩 다 탐색한 후 다시 연결된 길을 넓게 탐색하는 방법이다.보통 주어진 그래프에서 시작점과 끝점이 있을때 최단경로를 알고 싶을떄 사용한다.미로라는 board 배열과 모든 가야될 길을 넣을 queue와 조건문을 사용하여 코딩했다.조건은 board배열 밖으로 나가는 경우, 벽에 닿을 경우, 최단 경로가 아닌 경우 로 설정했다.이동은 dx,dy 함수를 사용하여 동서남북을 구현했다.이 BFS의 끝은 더이상 갈곳이 없을때, 즉 큐가 비어있을때 종료하도록 했다.매우 기초적인 문제이기에 쉽게 풀었다. 코드는 다음과 같다.#include#inclu..
-
백준(C++) 17298 [오큰수], 17299[오등큰수]알고리즘(백준) 2024. 9. 9. 21:31
https://www.acmicpc.net/problem/17298접근방법오큰수는 스택을 이용하여 푸는 문제이다. 문제를 보면 배열에 있는 원소의 오른쪽에 원소보다 가장 더 큰수를 찾으면 그 수 를 출력 한다. 만약 그 수가 없으면 -1를 출력한다. 이는 스택 이용하면 쉽다. 입력을 통해 배열안에 수를 넣고, 비교문을 통과해 정답 배열안에 정답을 넣는다.이때 비교문을 스택으로 쓴다.예를들어 조건을 살펴보면 입력 3,5,2,7일때 비교문에 들어올때 입력 원소 방향은 맨 오른쪽부터 왼쪽으로 간다. 여기서 스택이 비어있으면 스택에 현재 수를 push한다.만약 스택이 비어있지 않고, 입력배열의 현재수가 스택의 top 수보다 크거나 같으면 스택을 계속 pop한다.이 모든 조건이 아니라면 -1를 정답배열 안에 넣는..
-
백준(C++) 1629 [곱셈]알고리즘(백준) 2024. 9. 4. 23:33
https://www.acmicpc.net/problem/1629접근방법분할 정복을 이용한 거듭 제곱 문제이다. 입력 조건은 A, B, C는 모두 2,147,483,647 이하의 자연수이고, 이를 단순 계산할 시 오버플로우 또는 시간초과가 난다.(int 형 21억 언저리, long long 형 시간초과) 그러므로 다른 방법으로 접근해야한다.long long 형을 쓰고 재귀를 사용한 거듭제곱을 사용하면 오버플로우와 시간초과 둘다 잡을수있다.필요한 기본 수학 지식은 기본 지수법칙이다. a^b = a^(b/2) * a^(b/2)이를 이용하면 ll xx함수에서 a,b,c를 받아들이면 b가 1일때 그냥 계산으로 넘어가고2이상일 경우 재귀로 작동하게 했다.중간에 result = result * result % ..
-
백준(C++) 11729 [하노이 탑 이동 순서]알고리즘(백준) 2024. 9. 3. 19:38
https://www.acmicpc.net/problem/11729접근 방법하노이 탑은 재귀 함수의 대표적인 문제중 하나이다. 백준 사이트에 가도 여러 개의 하노이 탑 문제를 볼수있다.그러므로 재귀를 이용할 것이다.내가 배운 재귀 함수를 만드는 방법은 다음과 같다. 1.재귀 함수에는 항상 종료 조건이 있어야한다.2.재귀는 종료 조건을 만족하지 않는한 자기 자신을 호출해서 재귀를 반복한다. 그래서 이 문제도 이러한 공식으로 접근한다. 일단 하노이의 탑 최소 이동거리 공식은 2^n-1번 이다.이는 C++의 pow를 이용하여 계산하며 된다. 다음은 이동 순서 출력이다.하노이의 탑 이동은 원판을1번째 기둥에서 3번째 기둥으로 하는게 목표이다. 하지만 1번째 기둥에서 3번째로 바로 가는게 아니라 2번째 기..