리스트 컴프리헨션, 집합 자료형
·
자료구조 | 알고리즘
리스트 컴프리헨션 - 리스트를 초기화하는 방법 중 하나 - 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있음 [ 0부터 19까지의 수 중 홀수만 포함하는 리스트 만들기 ] arr = [i for i in range(20) if i % 2==1] print(arr) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용 n=3 m=4 arr = [[0] * m for _ in range(n)] print(arr) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 특정 크기의 2차원 리스트를 초기화할 때에는 반드시 리스트 컴프리헨션을 이용해야 함 다음과 같이 2차원 리스트를 초기화한다..
서로소 집합 알고리즘
·
자료구조 | 알고리즘
서로소 집합 알고리즘 - 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 - 서로소: 공통 원소가 없는 두 집합 - union, find 2개의 연산으로 조작 가능 union 연산 (합집합) : 2개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산 find 연산 : 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 서로소 집합 자료구조를 구현할 때는 트리 자료구조를 이용해 집합을 표현 서로소 집합 계산 알고리즘 1) A와 B 노드가 연결되어 있을 때 a) A와 B의 루트노드 a, b 를 각각 찾는다. b) a를 b의 부모 노드로 설정한다. (b가 a를 가리키도록 한다) // 일반적으로 더 번호가 작은 원소가 부모 노드가 되도록 구현 2) 모든 union 연산을 처리할 때까..
Programmers / 2단계 / 귤 고르기 / python
·
코딩테스트/programmers (python)
코딩테스트 연습 - 귤 고르기 | 프로그래머스 스쿨 (programmers.co.kr) 나의 풀이 . 모범 답안 def solution(k, tangerine): answer = 0 a={} for i in tangerine: if i in a: a[i]+=1 else: a[i]=1 a = dict(sorted(a.items(), key=lambda x: x[1], reverse=True)) for i in a: if k> Counter(["hi", "hey", "hi", "hi", "hello", "hey"]) Counter({'hi': 3, 'hey': 2, 'hello': 1}) Counter 생성자에 문자열을 인자로 넘기면 각 문자가 문자열에서 몇 번씩 나타나는지를 알려주는 객체가 반환됨. >>>..
Programmers / 2단계 / 예상 대진표 / python
·
코딩테스트/programmers (python)
코딩테스트 연습 - 예상 대진표 | 프로그래머스 스쿨 (programmers.co.kr) 나의 풀이 . 모범 답안 def solution(n,a,b): round = 0 while a != b: round += 1 a = (a+1) // 2 b = (b+1) // 2 return round
플로이드 워셜 알고리즘
·
자료구조 | 알고리즘
플로이드 워셜 알고리즘 모든지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우에 사용하는 알고리즘 - 단계마다 '거쳐 가는 노드'를 기준으로 알고리즘을 수행 - 매번 방문하지 않은 노드 중에서 최단 거리를 갖는 노드를 찾을 필요 X - 노드의 개수가 N개일 때 N번의 단계를 수행, 단계마다 O(N²) 연산을 통해 '현재 노드를 거쳐가는' 모든 경로를 고려 - 플로이드 워셜 알고리즘의 총 시간 복잡도는 O(N³) - 각 단계마다 특정한 노드 𝑘를 거쳐 가는 경우를 확인한다 𝑎에서 𝑏로 가는 최단 거리보다 𝑎에서 𝑘를 거쳐 𝑏로 가는 거리가 더 짧은지 검사 점화식 다익스트라 알고리즘과의 차이점 다익스트라 알고리즘에서는 출발 노드가 1개이므로 다른 모든 노드까지의 최단 거리를 저장하기 위해 1차..
다익스트라(Dijkstra) 알고리즘
·
자료구조 | 알고리즘
최단 경로 알고리즘 : 가장 짧은 경로를 찾는 알고리즘 자주 사용되는 최단 경로 알고리즘 : 다익스트라 최단 경로, 플로이드 워셜 알고리즘 다익스트라 최단 경로 알고리즘 - 그래프의 특정 노드에서 출발해 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘 - '음의 간선'이 없을 때 정상적으로 동작한다. - 기본적으로 그리디 알고리즘으로 분류된다. → 매번 '가장 비용이 적은 노드'를 선택해 임의의 과정을 반복하기 때문이다. 다익스트라 알고리즘 원리 출발 노드를 설정한다. 최단 거리 테이블을 초기화한다. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택한다. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다. 위 과정에서 3번과 4번을 반복한다. 다익스트라 ..
다이나믹 프로그래밍
·
자료구조 | 알고리즘
다이나믹 프로그래밍 큰 문제를 작게 나누고, 같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 기법 - 대표적인 예: 피보나치 수열 피보나치 수열은 다음과 같은 형태의 수열이다. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 점화식: 인접한 항들 사이의 관계식 피보나치 수열의 점화식 프로그래밍에서는 이러한 수열을 배열이나 리스트로 표현할 수 있다. 𝑛번째 피보나치 수를 f(𝑛)라고 할 때 4번째 피보나치 수 f(4)를 구하는 과정은 다음과 같다 피보나치 함수 소스코드 # 피보나치 함수(Fibonacci Function)을 재귀함수로 구현 def fibo(x): if x == 1 or x == 2: return 1 return fibo(x - 1) + fibo(..
[데이터 분석] 다양한 형태로 시각화하기 (막대 그래프, 항아리 그래프)
·
데이터 분석
1. 막대그래프 그리기 - bar() 함수 bar(막대를 표시할 위치, 막대의 높이) import matplotlib.pyplot as plt plt.bar([0,1,2,4,6,10], [1,2,3,5,6,7]) plt.show() 0에 해당하는 위치의 막대 높이는 1이고, 10에 해당하는 위치의 막대 높이는 7인 그래프 막대그래프의 위치를 오름차순으로 표현하는 경우가 많으므로, range() 함수를 사용하여 막대그래프의 위치 표현 가능 import matplotlib.pyplot as plt plt.bar(range(6), [1,2,3,5,6,7]) plt.show() 우리 동네의 인구 구조를 막대 그래프로 표현하기 import csv f = open('age.csv') data=csv.reader(f..