python97 [Algorithm] (이코테) DFS/BFS - DFS (Python/파이썬) ▶ 문제 설명 한 그래프에서 노드 1과 노드 7이 연결되어 있는 상황을 생각해보자. 인접 행렬 방식에서는 graph[1][7] 만 확인하면 된다. 반면에 인접 리스트 방식에서는 노드 1에 대한 인접 리스트를 앞에서부터 차례대로 확인해야 한다. 그러므로 특정한 노드와 연결된 모든 인접 노드를 순회해야 하는 경우, 인접 리스트 방식이 인접 행렬 방식에 비해 메모리 공간의 낭비가 적다. DFS는 탐색을 위해서 사용되는 탐색 알고리즘이라고 했는데 구체적으로 어떻게 동작할까? DFS는 깊이 우선 탐색 알고리즘이라고 했다. 이 알고리즘은 특정한 경로로 탐색하다가 특정환 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로로 탐색하는 알고리즘이다. 1. 탐색 시작 노드를 스택에 삽입하고 방문 처.. Developer/Algorithm 2023. 8. 30. [Algorithm] (이코테) DFS/BFS - 인접 리스트 예제 (Python/파이썬) ▶ 문제 설명 인접 리스트 예제 ▶ Code # 행(Row)이 3개인 2차원 리스트로 인접 리스트 표현 graph = [[] for _ in range(3)] # 노드 0에 연결된 노드 정보 저장 (노드, 거리) graph[0].append((1, 7)) graph[0].append((2, 5)) # 노드 1에 연결된 노드 정보 저장 (노드, 거리) graph[1].append((0, 7)) # 노드 2에 연결된 노드 정보 저장 (노드, 거리) graph[2].append((0, 5)) print(graph) ▶ Point 인접 리스트 정의 확인 Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 인접 행렬 예제 (Python/파이썬) ▶ 문제 설명 인접 행렬 예제 ▶ Code INF = 999999999 # 무한의 비용 선언 # 2차원 리스트를 이용해 인접 행렬 표현 graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] print(graph) ▶ Point 인접 행렬의 정의 확인 Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 2가지 방식으로 구현한 팩토리얼 예제 (Python/파이썬) ▶ 문제 설명 2가지 방식으로 구현한 팩토리얼 예제 ▶ Code # 반복적으로 구현한 n! def factorial_iterative(n): result = 1 # 1부터 n까지의 수를 차례대로 곱하기 for i in range(1, n + 1): result *= i return result # 재귀적으로 구현한 n! def factorial_recursive(n): if n Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 재귀함수의 종료 조건 예제 (Python/파이썬) ▶ 문제 설명 재귀함수의 종료 조건 예제 ▶ Code def recursive_function(i): # 100번째 호출을 했을 때 종료되도록 종료 조건 명시 if i == 100: return print(i, '번째 재귀함수에서', i + 1, '번째 재귀함수를 호출합니다.') recursive_function(i + 1) print(i, '번째 재귀함수를 종료합니다.') recursive_function(1) ▶ Point 재귀함수의 종료 조건 확인 Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 무한히 반복되는 재귀함수 예제 (Python/파이썬) ▶ 문제 설명 무한히 반복되는 재귀함수 예제 ▶ Code def recursive_function(): print('재귀 함수를 호출합니다.') recursive_function() recursive_function() ▶ Point 재귀함수의 정의 확인 Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 큐 구현 예제 (Python/파이썬) ▶ 문제 설명 큐 구현 예제 ▶ Code from collections import deque # 큐(Queue) 구현을 위해 deque 라이브러리 사용 queue = deque() # 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제() queue.append(5) queue.append(2) queue.append(3) queue.append(7) queue.popleft() queue.append(1) queue.append(4) queue.popleft() print(queue) # 먼저 들어온 순서대로 출력 queue.reverse() # 다음 출력을 위해 역순으로 바꾸기 print(queue) # 나중에 들어온 원소부터 출력 ▶ Point .. Developer/Algorithm 2023. 6. 2. [Algorithm] (이코테) DFS/BFS - 스택 구현 예제 (Python/파이썬) ▶ 문제 설명 스택 구현 예제 ▶ Code stack = [] # 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제() stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(1) stack.append(4) stack.pop() print(stack) # 최하단 원소부터 출력 print(stack[::-1]) # 최상단 원소부터 출력 ▶ Point stack의 정의 확인 Developer/Algorithm 2023. 6. 2. [Programmers] LV 0. 2차원으로 만들기 (Python/파이썬) ▶ 문제 설명 정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요. num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다. num_list n result [1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]] ▶ 제한 사항 num_list의 길이는 n의 배 수개입니다. 0 ≤ num_list의 길이 ≤ 150 2 ≤ n < num_lis.. Developer/Programmers 2023. 3. 23. [Programmers] LV 0. A로 B 만들기 (Python/파이썬) ▶ 문제 설명 문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요. ▶ 제한 사항 0 < before의 길이 == after의 길이 < 1,000 before와 after는 모두 소문자로 이루어져 있습니다. ▶ 입출력 예 before after result "olleh" "hello" 1 "allpe" "apple" 0 ▶입출력 예 설명 입출력 예 #1 "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다. 입출력 예 #2 "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다. ▶ Code def solution(before, after).. Developer/Programmers 2023. 3. 23. [Programmers] LV 0. 합성수 찾기 (Python/파이썬) ▶ 문제 설명 약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요. ▶ 제한 사항 1 ≤ n ≤ 100 ▶ 입출력 예 n result 10 5 15 8 ▶입출력 예 설명 입출력 예 #1 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다. 입출력 예 #2 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다. ▶ Code def solution(n): num = [] count = 0 for i in range(2,n+1): for j in range(1,i+1): if i % j == 0 .. Developer/Programmers 2023. 3. 23. [Programmers] LV 0. 중복된 문자 제거 (Python/파이썬) ▶ 문제 설명 문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요. ▶ 제한 사항 1 ≤ my_string ≤ 110 my_string은 대문자, 소문자, 공백으로 구성되어 있습니다. 대문자와 소문자를 구분합니다. 공백(" ")도 하나의 문자로 구분합니다. 중복된 문자 중 가장 앞에 있는 문자를 남깁니다. ▶ 입출력 예 my_string result "people" "peol" "We are the world" "We arthwold" ▶입출력 예 설명 입출력 예 #1 "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다. 입출력 예 #2 "We.. Developer/Programmers 2023. 3. 23. 이전 1 2 3 4 ··· 9 다음