목록CS/Algorithm (10)
CS log
✔️ 풀이 방법n,m을 받은 후 n*n의 graph 표를 만든다.이후 u와 v를 받아서 어떤 간선끼리 연결되어 있는지 graph에 기록한다.연결 요소의 개수를 구하는 것은 인접한 정점으로 이루어진 그래프 개수를 세는 것과 같다. ✔️ 코드import syssys.setrecursionlimit(10**6)n,m = map(int, sys.stdin.readline().split())graph = [[]for _ in range(n+1)]visited = [False]*(n+1)cnt=0for _ in range(m) : u,v = map(int, sys.stdin.readline().split()) graph[u].append(v) graph[v].append(u)# DFSdef dfs..
1. DFS/BFS 기초공통점그래프를 끝까지 탐색하기 위한 알고리즘이다 (완전탐색)to_visit, visited 리스트를 관리하는 것이 핵심이다!차이점탐색 순서 차이DFS는 상하로 우선 탐색, BFS는 좌우로 우선 탐색구현상의 차이점 : to_visit을 관리하고자 DFS는 스택, BFS는 큐(deque)를 사용codes overviewdef dfs(graph, start_node) : to_visit, visted = list(), list() # stack으로 관리 to_visit.append(start_node) while to_visit : node = to_visit.pop() if node not in visited : ..
1. StackLIFO(후입선출, Last-in First-out)대표적인 stack 자료구조 활용 : ctrl + z 파이썬에서의 구현 ➡️ 리스트stack = []stack.append(1) # [1]stack.append(2) # [1,2]stack.append(3) # [1,2,3]stack.pop() # [1,2] stack 자료 구조의 단점 ? 1 빼려면 2,3을 모두 빼야 함. 시간복잡도가 매우 큼. 맨 안쪽에 있는 블럭을 빼려면 느림. 2. Deque, double-ended queue보통의 큐는 FIFO(선입선출, First-in First-out)뒤에서는 push만, 앞에서는 pop만 가능하다. deque는 앞/뒤 모두에서 push와 pop이 가능하다! python에서의 구현 ➡️ f..
📍문제https://www.acmicpc.net/problem/1182N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 📍입력첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. 📍출력첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다. 📍풀이 방법combination 함수를 쓴다 -! 📍코드import sysfrom itertools import combinationsN, S = map(int,sys.stdin.re..
📍문제https://www.acmicpc.net/problem/4779 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자. 1. -가 3N개 있는 문자열에서 시작한다.2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다.--------------------------..