일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- LeetCode
- Algorithm
- Data Structure
- 자바
- 리트코드
- 프로그래머스
- network
- db
- BFS
- DP
- 다이나믹 프로그래밍
- Python
- java
- Database
- 알고리즘
- 백준
- TypeScript
- vscode
- DFS
- 그레이들
- react
- Javascript
- VIM
- 동적 계획법
- frontend
- git
- CS
- 안드로이드
- Redux
- Graph
- Today
- Total
목록Algorithm (22)
늘 겸손하게
자바 진법 변환 자바에서 10진수를 N진수로, N진수를 10진수로 변환하는 방법은 매우 간단하다. 10진수를 N진수 -> Integer.toString( '숫자', N ) N진수를 10진수 -> Integer.parseInt( 'N진수 숫자', N) 10 진수 -> N 진수 Integer.toString( '숫자', N ) public class Main { public static void main(String[] args) { int number = 24; for (int N = 2; N 10 진수 Integer.parseInt( '숫자', 숫자의 진수 N) 위 코드에서 만들어진 숫자들을 다시 10진수로 변환 public class Main { public static void main(String[..
유클리드 호제법 ( Euclidean algorithm ) 두 정수 A, B의 최대공약수를 구하는 알고리즘입니다. 원리 두 정수 a, b가 주어졌을때, a를 b로 나눈 나머지를 r이라고 하자. a, b의 최대공약수를 (a, b)라고 하면, 다음이 성립한다. (a, b) = (b, r) ex) (1071, 1029) = (1029, 42) = (42, 21) = (21, 0) = 21 코드 public int gcd(int p, int q) { if (q == 0) return p; return gcd(q, p % q); } 팁 : 큰 숫자를 첫 번째 인자로 주어야 불필요한 재귀 1번을 아낄 수 있다.
버블 정렬 배열 정렬 알고리즘으로 거품이 수면 위로 올라오듯이 배열을 정렬한다 해서 버블 정렬이라는 이름이 붙여졌다. 버블 정렬 구현 길이가 n인 배열이 주어졌을때 오름차순으로 정렬하려면 1. 인덱스 0번 요소와 바로 오른쪽 요소값을 비교하여 0번 요소가 더 크면 두 값을 교환(swap) 2. 인덱스 1, 2, 3, ... n - 2번 요소에 대해 1번 과정 반복하면 배열의 최대값이 마지막에 배치된다. 3. 인덱스 1, 2, 3, ..., n - 3번 요소로 위 과정 반복 4. 인덱스 1, 2, 3, ..., n - 4번 요소로 위 과정 반복 5. 오름차순으로 정렬됨. 코드 public static void main(String[] args) { int [] arr = {9, 4, 6, 1, 14, 5}..
플로이드 워셜 알고리즘 그래프가 주어졌을 때 모든 정점에서 모든 정점으로의 최단 경로를 구하는 알고리즘입니다. 한 점에서 다른 정점으로의 모든 최단 경로를 구하는 다익스트라 알고리즘은 음의 가중치를 사용하지 못하지만 플로이드 워셜 알고리즘은 음의 가중치를 가진 그래프도 계산 가능합니다. 플로이드 워셜 알고리즘 과정 1. 그래프를 2차원 배열로 나타내고 i행 j열에 i번 정점에서 j번 정점으로 가는 가중치를 저장합니다. 2. i 행 i 열 값은 0으로 저장하고, i번 정점에서 j번 정점으로 갈 수 없는 경우 INF (매우 큰 수)를 저장합니다. 3. k를 중간점으로 삼고, i번 정점에서 j번 정점으로 가는 가중치보다 정점 i -> 정점 k , 정점 k -> 정점 j로 가는 정점의 가중치가 작다면 i행 j열..