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..
Programmers / 2단계 / 점프와 순간 이동 / python
·
코딩테스트/programmers (python)
코딩테스트 연습 - 점프와 순간 이동 | 프로그래머스 스쿨 (programmers.co.kr) 나의 풀이 . 모범 답안 def solution(n): answer = 1 while n > 1: answer += n % 2 n = n // 2 return answer def solution(N): return bin(N).count('1') N이 2의 제곱이면 처음 점프를 제외하고는 순간 이동으로 갈 수 있음 → 1이 하나인 이진수 건전지 사용량은 N을 이진수로 변환했을 때의 1의 개수
[ 스택 / 큐 ] Programmers / 올바른 괄호 / python
·
코딩테스트/programmers (python)
코딩테스트 연습 - 올바른 괄호 | 프로그래머스 스쿨 (programmers.co.kr)  나의 풀이 (92.3점 실패 / 시간 초과)def solution(s): stack=[] if s[0]==')' or s[-1]=='(': return False for i in s: if i=='(': stack.append(i) else: stack.pop() if len(stack)==0: return True return False  모범 답안def solution(s): stack = [] for i in s: if i == '(': st..
[ 스택 / 큐 ] Programmers / 기능개발 / python
·
코딩테스트/programmers (python)
코딩테스트 연습 - 기능개발 | 프로그래머스 스쿨 (programmers.co.kr) 나의 풀이from collections import dequedef solution(progresses, speeds): day = deque() result=[] state = zip(progresses, speeds) for p, s in state: if (100-p)%s!=0: day.append((100-p) // s + 1) else: day.append((100-p) // s) ... return result100%가 될 때까지의 기간을 담은 리스트까지만 출력 / 배포 순서 출력을 위해 큐를 이용해 ..