목록분류 전체보기 (25)
DataScience
1. 폴더 생성 폴더가 존재하여 중복되는것을 방지하기 위하여 if 조건문을 작성하여 존재하는지 여부를 확인한 다음 존재하지 않을시 폴더 생성 함수인 os.makedirs() 함수를 사용하여 폴더를 생성한다. # ./ : 현재 디렉터리 import os def newfolder(directory): try: # 만약 폴더가 없다면 if not os.path.exisis(directtory) os.makedirs(directtory) # 폴더 생성 함수 except OSError: print("Error") parent_folder = "폴더생성경로" newfolder(parent_folder) 2. 경로 불러오기 glob() 함수를 이용하여 해당 폴더 안에 있는 데이터를 한곳에 모으거나 특정 확장자만 불러..

문제 설명 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한 사항 arr은 길이 1이상, 15이하인 배열입니다. arr의 원소는 100 이하인 자연수입니다. 입출력 예시 풀이 및 코드 리뷰 내가 제출한 답 (Deque / Math 방식 사용) from collections import deque import math def lcm (a,b): r..

데크(Deque) : 앞ㆍ뒤 양쪽 방향에서 엘리먼트를 추가하거나 제거 보통의 큐(Queue)나 스택(Stack)의 경우 한방향으로 진행되지만 Deque의 경우 양쪽 방향으로 엘리먼트를 추가하거나 제거할수 있으며 일반적인 리스트가 삽입이나 제거를 할경우 O(n)이 걸리지만, Deque의 경우 O(1)로 굉장히 빠르다. 1. Deque의 특징 1. 시작점의 값을 넣고 빼거나, 끝 점의 값을 넣고 빼는 데 최적화된 연산 속도를 제공한다. 2. 삽입 / 삭제 연산이 빈번한 알고리즘에서 시간복잡도가 O(1)이므로 빠른 속도를 보여준다. 2. Deque 라이브러리 from collections import deque 3. 파이썬의 Deque 연산 1. deque.append(): Deque의 뒤에 엘리먼트를 삽입한..

구간 합(Prefix sum) : 합 배열을 이용하여 시간 복잡도를 줄이기 위한 목적 n개의 수들이 존재하고 0의 인덱스의 위치부터 n번째 인덱스까지의 합을 구한다고 했을때 다음과 같이 두가지 방법이 존재한다. 부분 합 (Partial sum) - 시간복잡도 O(N) 처음부터 특정인덱스까지의 합을 의미하며 반복분과 같은 누적합을 이용하여 처음위치부터 정해진 위치까지 n번 돌면서 더해주는것을 의미한다 구간 합(Prefix sum) - 시간복잡도 O(1) 특정 구간의 합을 의미하며, 각각의 숫자까지의 합을 계산하여 별도 리스트에 저장해 놓고 저장한값을 사용하는 것을 의미한다. 1. 합 배열 공식 # 합 배열 공식 S[i] = S[i-1] + A[i] # i번째까지의 합 = (i-1) 번째까지의 합 + i번째..
● 서로소[Disjoint] 집합 : 서로 중복 포함된 원소가 없는 집합 (교집합 x) 1. 서로소 집합의 특징 1. 서로소 집합을 표현하는 방법으론 연결 리스트와 트리 방식이 있다. 2. 서로소 집합의 자료구조는 Union-find 자료구조라고 불린다. 3. 두 집합의 서로소를 파악할수 있다면, 각 집합이 어떤 원소를 공통으로 가지고 있는지 알수 있다. 2. 서로소 집합 과정 1. make-set(x) : 모든 원소를 초기화시켜주어 새로운 집합을 생성하는 과정 for i in range(1, v+1): parent[i] = i # 맨 처음은 자기자신의 인덱스의 값을 부모로 가지도록 설정하여, 최종적인 루트노드를 찾아가면 바꿔준다. 2. find-set(x) : 특정 원소가 속한 집단이 어떤 집단이 찾는..

그래프 : 그래프는 노드와 엣지로 구성된 집합이며, 즉 서로 다른 객체가 연결되어 있다고 생각하면 된다. 1. 그래프 기초 노드 (node) : 독립된 개체로 동그라미로 표현 에지 (edge) : 노드와 노드를 연결하는 연결선 아크 (arc) : 방향성을 가진 엣지 인접 (adjacency) : 정점 v와 정점u에 간선이 있다면, '인접하다'고 한다. 차수 (Degree) : 진입차수(정점으로 들어오는 간선의 수)와 진출차수(정점을 나가는 간선의 수)의 합이다. 경로 (path) : 정점에서 다른 정점까지의 경로는 정점의 순서이다. 2. 그래프 구현 2.1. 인접 리스트 (adjacency list) : 파이썬의 리스트를 이용하여 노드 개수만큼 리스트를 선언하는 방식 정점 하나에 인접한 모든 정점을 순서..

문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다. 모든 명함의 가로 길이와 세로 길이를 나타..

● 병합[Merge] 정렬 : 데이터를 분활하고 분활한 집합을 정렬하여 합침 병합정렬의 경우 배열을 앞과 뒤로 나눠서 각각 최소 단위(1)까지 분활하고 분활한 집합을 정렬하며 합치는 알고리즘이다. 1. 병합 정렬의 특징 1. 병합 정렬의 시간 복잡도는 O(nlogn)으로 2. 병합 정렬은 n개의 개체가 있다면 O(n)만큼의 추가 공간이 필요 2. 병합 정렬 과정 1. Divide [O(1)] : n개의 값을 1개가 남을때까지 두 개의 n/2 keys로 계속 나눈다. 2. Merge [2T(n/2)] : 합병정렬을 사용하여 두 개의 배열을 정렬한다. 3. Combine [O(n)] : 두 개의 정렬된 배열을 원래 하나의 배열로 만든다. - 병합의 과정에서 투 포인터의 개념을 사용하며 반드시 숙지 할 것!!..