본문 바로가기

Computer Science

파이썬의 연산자 메소드 연습 def solution(num1, num2): answer = int(num1).__floordiv__(num2) return print(answer) # 연산자 메소드 # __add__(self, other) : + # __sub__(self, other) : - # __mul__(self, other) : * # __truediv__(self, other) : / # __floordiv__(self, other) : // # __mod__(self, other) : % # __pow__(self, other[, modulo]) : ** # __lshift__(self, other) : > ref. https://andamiro25.tistory.com/50 [파이썬]연산자 오버로딩과 특수메소드, Ra.. 더보기
[Python] pandas .tsv 파일 불러오기 - header 생성 및 추가 tsv 파일이란, csv파일과 비슷하지만 ,(쉼표)가 아닌 탭으로 뛰어진 파일이다. 기본 파일 불러오기 import pandas as pd df = pd.read_csv("파일이름.tsv",delimiter='\t') print(df) CSV파일을 읽을때 DataFrame에 header columns 추가 import pandas as pd import numpy as np # read_csv 에서 names 를 직접 사용하거나 파일에 헤더가없는 경우 명시 적으로 header = None 설정 가능 df = pd.read_csv("파일이름.tsv", sep='\t', names=["a", "b", "c", "d"]) DataFrame 메소드에서 직접 header columns 을 추가 import pan.. 더보기
[Computer Science] 자료구조 - 그래프 탐색 DFS, BFS DFS(depth-first search) - 깊이우선탐색 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. LIFO 스택 자료구조(혹은 재귀함수)를 이용 DFS 동작과정 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 더이상 2번 과정을 수행할 수 없을 때까지 반복. Backtracking DFS에서 활용되는 방법, 노드가 있을만한 곳을 되돌아가서 모두 살펴본다는 개념 위의 그림처럼 DFS는 깊이우선적으로 탐색을 진행하고, 재귀적으로 아래에서부터 탐색하지 않은 정점이 있는지 확인하는 방법으로 되돌아가는 것에서 backtracki.. 더보기
[Computer Science] 자료구조 - 그래프 데이터 간의 관계를 표현하기 위한 자료구조 비선형 구조, 트리도 일종의 그래프 중 하나. 2021.10.04 - [Computer Science] - [Computer Science] 자료구조 - 트리 tree, 순회 traversal 알고리즘 그래프와 트리의 차이점 특징 노드 간에 연결될 수 있다는 점을 제외하고는 트리와 비슷하며, 루프를 형성할 수도 있다. 트리에서는 노드의 탐색에 제한이 있지만, 그래프는 루프 형성이 가능하다. (순환, 사이클) object간의 관계를 표현을 할 때 유용하다.(SNS, 도로 상의 차량 검색, 운송시스템) 그래프는 노드간의 관계, 트리는 노드간의 계층을 표현한다. 트리에만 있는것 : 계층 개념 그래프 기본 구조 그래프는 vert(노드 또는 정점)와 edge(간선)으로 .. 더보기
[Computer Science] 자료구조 - 탐욕알고리즘 Greedy 탐욕알고리즘은 발견법(heuristic method)의 방법중 하나. 발견법(heuristic method) 최선, 최적의 답을 찾기보다도 주어진 상황을 한단계씩 빠른 시간 내에 해결하기 위해 사용하는 방법론 backtracking(역추적)과 같이 알고리즘 수행시간이 많이 걸릴 때 사용하는 방법 (역추적과 구조는 비슷하지만 방법이 다름) 탐욕법은 이전의 선택으로 돌아가는 역추적과는 반대개념으로, 다른 문제들과 독립적이다 탐욕법이 쓰이는 실제상황예시 1) 여행짐싸기(물건담기) : 여행 배낭에 물건을 정해진 시간 내에 담으려는 경우, 우선순위가 높은 순서대로 물건을 담을 때 한번 배낭에 담은 물건은 다시 빼지 않는다. 2) 여행경로 짜기(도시방문) : 도시가 많아질 수록, 도시를 방문(배열)할 수 있는 가짓.. 더보기
[Computer Science] 자료구조 다이나믹프로그래밍(Dynamic Programming) - 메모이제이션(Memoization) 다이나믹 프로그래밍 Dynamic Programming '문제의 일부분을 풀고 그 결과를 재활용하는 방법으로 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상 시키는 패러다임. 하나의 문제는 단 한번만 풀도록 하는 알고리즘 -탑다운과 보텀업으로 구성되어있다. DP를 사용하게 되는 상황 : 이진 검색, 최단경로 알고리즘, 최적화 문제, 외판원 문제 !!! 분할 정복과의 차이점? 분할정복(Divide and Conquer)과 유사한 개념. 분할정복 기법은 동일한 문제를 다시 푼다는 단점이 있다.(=부분 문제, 서브문의 중복) ('정렬'과 같은 문제는 다시 풀게 되는 단점 없다, 그 예시로 퀵정렬과 병합 정렬이 있고 이 또한 매우 빠름) 다이나믹 프로그래밍 방식 다이나믹 프로그래밍의 구현은 일반적으.. 더보기
[Computer Science] Divide and Conquer(분할 정복) - 퀵정렬과 병합정렬(Quick Sort and Merge Sort) Divide and Conquer(분할 정복) 복잡하거나 큰 문제를 여러 개로 나눠서 푸는 방법. 비슷한 크기로 문제를 분할하고, 해결된 문제를 제외하고 동일한 크기로 문제를 다시 분할한다. 병렬적으로 문제를 해결할 수 있다. 단점: 동일한 문제를 다시 푼다. 문제해결함수가 재귀적으로 호출될 수 있으므로 메모리가 추가적으로 사용된다. !!! 재귀호출과 분할정복의 차이 !!! 재귀호출은 같은 함수코드를 재호출하는 것(같은 함수코드 사용) 분할정복은 비슷한 작업을 재진행하는 것(같은 함수코드는 아닐 수 있음) ''' 1부터 10까지의 합 구하기 ''' #재귀 함수 사용 def r_func(num): if num < 1: return 0 else: return num + r_func(num-1) print('.. 더보기
[Computer Science] Iterative Sorting(반복 정렬) - Selection Sort(선택정렬), Insertion Sort(삽입정렬), Bubble Sort(버블정렬), Count Sort (계수 정렬) / 시간 측정 비교 모든 알고리즘의 기본 원리는 숫자와 조건을 활용하면서 발전시킨다고 생각하면, 어려운 알고리즘에 대해 배우는 관점이 달라질 수 있다. Selection Sort(선택정렬) 선택정렬은 가장 작은 노드(최소값)를 선택하고 왼쪽부터 정렬을 하기 위해 알맞은 위치와 교환하는 작업을 반복하는 것. 선택정렬 정리 : 최소노드 선택 -> 왼쪽부터 비교 -> 교환 단점 : 버블정렬과 달리 서로 이웃하지 않은 노드를 교환하므로, 안정적이지 않다. '''선택 정렬 소스 코드 ''' array = [7, 5, 9, 0, 3, 1, 6, 2, 8, 4] for i in range(len(array)): min_index = i #가장 작은 원소의 인덱스로 지정 for j in range(i+1, len(array)): #j는 .. 더보기