본문 바로가기

Study46

[Python(파이썬)] 2차원 리스트를 1차원으로 만들기 2차원 리스트를 1차원으로 만들기 test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]] testresult = [1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9] 2차원 리스트를 1차원으로 만드는 다양한 방법 1. sum 함수를 이용한 방법 - sum(리스트명, []) 2. itertools를 이용한 방법1 - itertools.chain(*iterables) 3. itertools를 이용한 방법2 - itertools.chain.from_iterable(iterables) 4. list comprehension을 이용한 방법 - reduce(집계 함수, iterable 데이터) 5. reduc.. 2021. 8. 25.
[Python(파이썬)] range, enumerate 함수 range([시작 숫자,] 종료 숫자 [,step]) 특정 구간의 숫자 범위를 만들어 주는 함수 특정 구간의 숫자 범위의 값을 반복 가능한 객체로 만들어 return 시작 숫자를 생략한다면 default = 0 step을 생략한다면 default = 1이다. for문과 함께 사용한 range(시작 숫자, 종료 숫자, step) 시작 숫자부터 step 숫자만큼의 간격으로 (종료 숫자 - 1)까지의 정수 범위를 반환 # range 예 for i in range(2, 8, 2): print(i) # 출력 2 4 6 for문과 함께 사용한 range(시작 숫자, 종료 숫자) 시작 숫자부터 step(default = 1) 간격으로 (종료 숫자 - 1)까지의 정수 범위.. 2021. 8. 20.
[Algorithm] 그리디 (탐욕) 알고리즘 그리디 알고리즘(탐욕법, Greedy Algorithm) 매 선택에서 현재 상황에 지금 당장 좋은 것만을 선택하여 적합한 결과를 도출하는 알고리즘 설계 기법 이 방법은 선택하는 그 순간에는 최적인 방법이지만 최종적으로 보면 그 선택들이 최적이라는 보장은 없다. 그리디 알고리즘은 완전한 최적해를 보장하지는 않지만 그런대로 괜찮은 해답을 알려준다. 계산속도가 정확한 알고리즘에 비해서 빠른 경우가 많다. 따라서, 적당히 괜찮은 해답을 정해진 시간 내 찾을 때 적합한 알고리즘이다. 대표적인 그리디 알고리즘의 예 : 다익스트라 알고리즘(최단 경로 문제) 대표적인 그리디 알고리즘 문제 : 거스름 동전 개수 구하기 def greedy(money): m = [500, 100, 50, 10] cnt = 0 for i i.. 2021. 8. 13.
[Python(파이썬)] TypeError: 함수에 필요한 실행 인자 개수 오류 문제를 풀다가 아래와 같은 오류를 만났다. 그래서 어떤 오류인지 찾아봤더니 함수에 필요한 실행 인자 개수를 잘 못 적었던 것이었다. ※ 인자의 개수를 잘 못 적었을 때 TypeError: combinations() missing required argument 'r' (pos 2) combinations(iterable, r) 함수를 사용할 때 실수로 cb = list(combinations((infotemp, j))) 라고 적었더니 error가 났다. 알고 보니 combinations에 괄호가 두 개 적혀서 인자가 두 개여야 하는데 한 개로 인식 파이썬의 오류 메시지가 실행 인자를 더 적게 넣었을 때와 많이 넣었을 때 typeerror 메시지를 통해 알려준다. 1. 실행 인자 개수를 적게 적었을 때 c.. 2021. 8. 6.
[Python(파이썬)] 리스트 초기화 비어있는 리스트 초기화 # 비어있는 리스트 초기화 test = [] 값이 주어진 초기화 # 값이 주어진 초기화 test = [1,2,3,4] test2 = ['2','a','b'] test3 = [[2,3],[3,1],[4,2]] 1차원 리스트 초기화 - for문 사용 -> 컴프리헨션 사용X 초기화하는데 코드가 길어진다. # 리스트 컴프리헨션 X 초기화 test = [] for i in range(5): test.append(0) #[0, 0, 0, 0, 0] - 컴프리헨션 사용 O # 리스트 컴프리헨션 O test = [ 0 for i in range(5)] #[0, 0, 0, 0, 0] 2차원 리스트 초기화 2차원 리스트를 초기화 할 때는 반드시 컴프리헨션을 사용해야 한다. - 컴프리헨션 사용X ->.. 2021. 8. 5.
[Algorithm] BFS, DFS 그래프 탐색 알고리즘의 두가지 BFS, DFS이다. 그래프 : 정점(node)과 정점들을 이어주는 간선(edge)으로 이루어진 자료구조 Breath First Search (BFS; 너비 우선 탐색) 그래프에서 인접한 노드부터 우선적으로 탐색하는 알고리즘 시작 정점으로부터 인접한 정점을 먼저 방문하고 멀리 떨어져있는 정점을 나중에 방문하는 방법 - 주로 Queue를 이용하여 구현 from collections import deque check = [False]*(v+1)# 각 노드 방문 정보 리스트 def bfs(x, check): # x: 현재 노드 queue = deque([x]) check[x] = True# x 노드 방문 표시 while queue:# queue가 빌 때까지 k = queue.po.. 2021. 8. 1.
[자료구조] 수식의 전위, 중위, 후위 표기법 수식의 표기법 전위(prefix) 표기법 연산자를 먼저 표시한 후, 피연산자를 나중에 표시 ex) +AB 중위(infix) 표기법 피연산자 사이에 연산자 표기, 대수학에의 표기법 ex) A+B 후위(postfix) 표기법 피연산자를 먼저 표시, 연산자를 나중에 표시 ex) AB+ 전위 표기법 변환 > A*B+(C-D)*E 1. 중위 표기법에서 순서(우선순위)에 맞게 괄호로 묶어 준다. ((A*B)+((C-D)*E)) 2. 연산자를 해당 괄호 바로 앞(왼쪽)로 옮긴다. +(*(AB)*(-(CD)E)) 3. 괄호를 제거한다. +*AB*-CDE 후위 표기법 변환 > A*B+(C-D)*E 1. 중위 표기법에서 순서(우선순위)에 맞게 괄호로 묶어 준다. ((A*B)+((.. 2021. 7. 21.
[Python(파이썬)] 팩토리얼(factorial) 구현 팩토리얼(계승; Factorial) 1부터 구하고자하는 양의 정수 N까지의 정수를 모두 곱한 것 팩토리얼 예시 3! = 3 * 2 * 1 = 6 5! = 5 * 4 * 3 * 2 * 1 = 120 파이썬 팩토리얼 구하는 3가지 방법 1. 재귀 2. for문 3. math.factorial 함수 1. 재귀함수를 통해서 팩토리얼 구현 방법 n! = n * (n-1) * (n-2) * … * 1 이러한 식으로 팩토리얼은 구성되어있기 때문에 n에서 하나씩 값을 뺀 후 다시 함수를 호출해서 곱하게 하면 된다. # 팩토리얼 재귀함수 def factorial_recursion(n): if n > 1: return n * factorial_recursion(n-1) else: return 1 # 출력값 >>> fact.. 2021. 7. 21.
[자료구조] 데큐(deque; double-ended queue) 데큐(deque; double-ended queue) 리스트의 양쪽 끝에서 삽입과 삭제를 모두 허용하는 자료의 구조. 이것은 스택과 큐의 자료 구조를 복합한 형태 Deque import 및 생성 from collections import deque # deque 생성 deq = deque() Deque 원소 삽입 # item을 deque 오른쪽 끝에 삽입 deq.append(item) # item을 deque 왼쪽 끝에 삽입 deq.appendleft(item) Deque 원소 삭제 # deque 오른쪽 끝에 있는 item을 pop한 후 삭제 deq.pop() # deque 왼쪽 끝에 있는 item을 pop한 후 삭제 deq.popleft() # item을 deque에서 찾아 삭제 deq.remove(i.. 2021. 7. 19.
[자료구조] 우선순위 큐(Priority Queue) 우선순위 큐(Priority Queue) 들어간 순서에 상관없이 우선순위가 가장 높은 데이터를 먼저 삭제하는 자료구조 스택 : 원소들은 후입 선출 순으로 처리된다. (LIFO; Last In First Out) 큐 : 원소들은 선입 선출 순으로 처리된다. (FIFO; First In First Out) 우선순위 큐를 구현하는 방법 1. List(리스트) : 삽입 - O(1), 삭제 - O(N) 2. Heap(힙) : 삽입 - O(logN), 삭제 - O(logN) 우선순위 큐 import 및 생성 from queue import PriorityQueue # 우선순위 큐 생성 que = PriorityQueue() 우선순위 큐 원소 추가 - .put() que.put(1) que.put(3) que.put.. 2021. 7. 19.