728x90
:: 그래프 탐색 :: dfs와 bfs알고리즘은 대표적인 그래프 탐색 알고리즘이다. 해당 알고리즘은 코딩 테스트에 높은 비율로 출제되기 때문에 꼭 학습해야하는 알고리즘 중 하나이다. DFS(Depth First Search) - 깊이 우선 탐색 깊이 우선 탐색은 재귀를 통하여, 시작 노드부터 그래프의 제일 안쪽 노드까지 깊숙히 방문하며 그래프를 탐색하는 알고리즘이다. 다음 그림 예시를 통해 탐색과정에 대하여 알아보자 1번에서 시작하는 다음과 같은 그래프가 있다고 하자. 그래프는 수가 작은 순으로 탐색하도록 초기 값이 주어진다. 그럼 DFS로 탐색하게 되었을 때, 어떻게 탐색하게 될까? 노드에 방문할 때마다 해당 노드에 방문 처리를 하며, 1과 연결되어 있는 노드2와 노드3 중에 수가 작은 순으로 탐색을 ..
"에라토스테네스의 체" 알고리즘 문제, 특히 완전 탐색 유형을 풀다보면 아래와 같은 문제상황을 종종 마주친다. 1~n 사이에 있는 소수의 개수 구하기 보통 브루트포스를 통해 풀 수 있는데 레벨이 어느정도 되는 문제라면 시간초과가 발생하기 마련이다. 브루트포스(Brute Force)란? 직역하면 "무식한 힘" 이라는 뜻을 가진 알고리즘으로 무식하게 전체를 탐색하는 문제이다. 프루트포스를 사용하여 소수찾기 문제를 해결하면 아래와 같은 코드를 얻을 수 있다. 브루트포스 소수찾기 코드 def findSosuBF(n): sosuArr = [] for i in range(2,n+1): cnt = 0 for j in range(2,i): if i % j == 0: cnt+=1 if cnt == 0: sosuArr.a..
백준 1309번 동물원 문제 파이썬 풀이 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net " 💡 문제 해결 아이디어 " n의 값에 따라 달라지는 결과에서 규칙을 찾아 점화식을 만들어 문제를 해결하였다. 처음 주어지는 그림을 통하여 계산 결과를 유추해볼 수 있다. 규칙 n = 1 , ans = 3 n = 2 , ans = 7 n = 3 , ans = 17 n = 4 , ans = 41 ... 해당 규칙을 보면 이전 값에 따라 다음 값이 결정되는 규칙이 숨어있다. 값들을 살펴보면 n == 3 일 때의 값은 (n == 2일 때의 값) * 2 + (n == 1일 때의 값) 으로 구할 수 있다. 그 이후의 수들도 마찬가지다. 이를 점화식으로 만들면 다..
백준 2579번 계단 오르기 파이썬 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 해당 2579번 문제는 300개 이하의 계단이 주어지며 각 계단마다 다른 점수를 흭득할 수 있다. 이러한 상황 가운데서 위와 같은 조건에 맞춰 얻을 수 있는 점수의 최댓값을 흭득하는 문제다. " 💡 문제 해결 아이디어 " 해당 문제는 특정 위치에서의 최댓값을 구하는 문제이므로 조건을 잘 세워야한다. 본인은 이번 문제에서 dp테이블의 값의 기준을 다음과 같이 정의하여 해결하였다. dp[i] : i번째 계단에서 흭득할 수 있는 최댓값 또한 다..
" 백준 2839번 설탕 배달 파이썬 풀이 " 2839번 문제는 다음과 같은 조건을 가진 문제이다 " 문제 조건 " 3, 5kg의 설탕봉지로 정확히 NKg의 설탕을 옮기는 가장 최소한의 봉지 수를 구하기 Nkg을 만들 수 없다면 -1 출력 3 4: dp[5] = 1 주어진 무게가 3kg, 5kg이므로 3kg,5kg을 만들 수 있는 경우는 결국 1이다. 그리고 4kg을 만들 수 있는 경우는 절대 없기 때문에 -1로 초기화 해준다. 이 과정은 if문을 통해 주어진 n의 값을 봐가면서 수행해야 Index Error가 나지 않는다. 그보다 큰 값들의 경우엔 반복문을 통해 이후의 dp 테이블 값을 구해주면 되는데 조건을 잡아 값을 초기화 해준다. 조건1. 이전 값(현재 값에서 -3한 값과 -5 한 값)이 만들어질..
" 백준 9461번 파도반 수열 문제 파이썬 " 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net " 💡 문제 해결 아이디어 " 이 문제는 주어진 수열 문제와 초기 값을 통하여 P(N) 값을 구해내는 문제이다. 이 문제는 기존 값을 통하여 이후의 값을 유추할 수 있기 때문에 DP문제로 분류할 수 있다. 점화식 찾기 2(p[5]) = 1(p[3]) + 1(p[2]) 3(p[6]) = 2(p[4]) + 1(p[3]) 4(p[7]) = 2(p[5]) + 2(p[4]) ... 9(p[10]) = 5(p[8]) + 4(p[7..