코딩테스트

코딩테스트/알고리즘

[알고리즘] DFS & BFS - 깊이우선 탐색과 너비우선 탐색

:: 그래프 탐색 :: dfs와 bfs알고리즘은 대표적인 그래프 탐색 알고리즘이다. 해당 알고리즘은 코딩 테스트에 높은 비율로 출제되기 때문에 꼭 학습해야하는 알고리즘 중 하나이다. DFS(Depth First Search) - 깊이 우선 탐색 깊이 우선 탐색은 재귀를 통하여, 시작 노드부터 그래프의 제일 안쪽 노드까지 깊숙히 방문하며 그래프를 탐색하는 알고리즘이다. 다음 그림 예시를 통해 탐색과정에 대하여 알아보자 1번에서 시작하는 다음과 같은 그래프가 있다고 하자. 그래프는 수가 작은 순으로 탐색하도록 초기 값이 주어진다. 그럼 DFS로 탐색하게 되었을 때, 어떻게 탐색하게 될까? 노드에 방문할 때마다 해당 노드에 방문 처리를 하며, 1과 연결되어 있는 노드2와 노드3 중에 수가 작은 순으로 탐색을 ..

코딩테스트/알고리즘

[알고리즘] 에라토스테네스의 체 with '프로그래머스 2단계 - 소수찾기 문제'

"에라토스테네스의 체" 알고리즘 문제, 특히 완전 탐색 유형을 풀다보면 아래와 같은 문제상황을 종종 마주친다. 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번 동물원 문제 파이썬 풀이 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번 계단 오르기 파이썬 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 해당 2579번 문제는 300개 이하의 계단이 주어지며 각 계단마다 다른 점수를 흭득할 수 있다. 이러한 상황 가운데서 위와 같은 조건에 맞춰 얻을 수 있는 점수의 최댓값을 흭득하는 문제다. " 💡 문제 해결 아이디어 " 해당 문제는 특정 위치에서의 최댓값을 구하는 문제이므로 조건을 잘 세워야한다. 본인은 이번 문제에서 dp테이블의 값의 기준을 다음과 같이 정의하여 해결하였다. dp[i] : i번째 계단에서 흭득할 수 있는 최댓값 또한 다..

코딩테스트/백준

[백준] 2839번 - 설탕 배달 (파이썬)

" 백준 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번 파도반 수열 문제 파이썬 " 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..

코딩테스트/백준

[백준] 3184번 - 양 (파이썬)

" 백준 3184번 양 문제 파이썬 " 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net " 💡 문제 해결 아이디어 " 이번 문제는 R x C 크기의 범위 내에 있는 울타리 범위 내에서 살아남은 양의 수와 늑대의 수를 구하는 문제이다. bfs를 통해 한 울타리 범위 내에 있는 양과 늑대의 수를 체크하고 문제에 주어진 조건대로 양의 수 > 늑대의 수 : 양이 살아남음 늑대의 수 >= 양의 수 : 늑대가 살아남음 이렇게 체크하여 총 살아남은 양과 늑대의 수를 출력하도록 구현하였다. 코드는 다음과 같다...

코딩테스트/백준

[백준] 2606번 - 바이러스 (파이썬)

" 백준 2606번 바이러스 문제 파이썬 " " 💡 문제 해결 아이디어 " 바이러스 문제는 그래프에서 1에 연결되어 있는 노드를 탐색하여 그 갯수를 출력하는 문제이다. 방문한 노드는 visited 배열에 True로 저장하여 중복 탐색하지 않도록 구현한다. 주어지는 입력값을 이용하여 연결 관계 그래프를 생성하고 1번 노드를 시작으로 연결되어 있는 노드의 갯수를 카운트하면 정답을 도출할 수 있다. 예제 입력 값을 통하여 연결 관계 그래프를 생성하면 다음과 같은 그래프가 생성된다. 주의 사항! 입력받은 값들로 그래프를 그릴 때에 방향이 있는 그래프가 아니므로 node1에 node2을 연결해주었다면, node2에도 node1을 추가해주어야 한다. 만약 node1에 node2을 연결하는 작업만 진행한다면 아래와 ..

PgmJUN
'코딩테스트' 카테고리의 글 목록