
문제를 풀다가 행렬을 곱하는 부분에서 조금 혼란이 왔어서 정리해보려한다! 내가 아는 행렬 곱셈 방법은 2가지이다. 1. 3중for문 def mulfor(a, b): N = len(b) result= [[0 for _ in range(len(b[0]))] for _ in range(len(a))] for i in range(len(a)): for j in range(len(b[0])): for k in range(N): result[i][j] += a[i][k] * b[k][j] return result 먼저 A행렬이 MxN이고 B행렬이 NxK인 경우 AxB => MxK행렬이 된다. 따라서 i < M and j < K 가 된다. 중간에 계속 바뀌는 k는 A행렬의 행개수, B행렬이 열개수 만큼 이동이 되면서..
여러가지 정렬 알고리즘 중 하나인 선택정렬 알고리즘! 간단히 설명하면 맨 앞에서부터 하나의 원소를 고정한 후, 그 뒤에 원소들과 비교해서 고정된 원소보다 작으면서 가장 작은 원소와 위치를 바꿔준다. 예를 들어 5 4 3 2 1 배열을 sort할 경우 고정원소는 5이고, 4 3 2 1 중 가장 작은 원소는 1이므로 1 4 3 2 5 가 된다. 다음으로 고정원소는 4이고, 3 2 5중 가장 작은 원소는 2이므로 1 2 3 4 5 가 된다. 이런 방식으로 문자열 길이만큼 돌면 된다. 선택정렬은 이중 for문 / 재귀 두 가지 방식으로 구현할 수 있다. 1. 이중 for문 def selectionSort(lst): for i in range(len(lst)): target = i for j in range(i+..

오늘 공부해볼 알고리즘은 BFS!! 알고리즘공부를 시작할 때 나를 가장 괴롭혔던,,,, ㅠㅠ 단순히 트리 형식으로 그림만 봤을때는 이해가 쉬운데 코드로 보려고 하다보니까 혼란스러웠던 기억이 난다. BFS는 너비우선 탐색이다! 가장 이해하기 쉬운 트리형태의 그림으로 보면 bfs는 1->2->3->4->5->6->7 순서로 이동한다. 반면에 dfs는 1->2->4->5->3->6->7 순서로 이동한다. dfs 와 bfs 각각 장단점이 있지만 bfs는 최단거리를 찾을 때 주로 사용된다! dfs는 모든 길을 다 가보고 길이를 비교하면서 최단 거리를 찾게 된다. 따라서 시간이 오래 걸리게 된다. 하지만 bfs는 너비우선탐색으로 한번에 탐색하므로 dfs에 비해서 시간이 적게 걸린다! 다음으로는 큐에 담기는 과정을 ..

오늘은 문자열 검색(?) 알고리즘을 공부해볼 예정이다! 다양한 알고리즘이 존재하겠지만 오늘 해볼 알고리즘은 BruteForce 이다!-! Bruteforce 알고리즘 굉장히 무식한 방법이다. 처음부터 하나하나 비교하면서 찾는 방법이다! 시간이 많이 걸리는 반면 100% 정확하다는 강력한 장점이 있따! 예를 들어보자.! 주어진 문자열: ABCABCPCPC 찾고 싶은 문자열: ABCP 첫 번째 인덱스부터 하나하나 비교를 해본다! 1,2,3 번 인덱스는 같지만 4번에서 다른 것을 알 수 있다! 그렇다면 찾을 문자열인 보라색 블럭을 한칸 이동한다.... 한 칸 이동했더니 이게뭐람 첫 번째부터 다르다! -----> 그러면 한칸 더 이동한다 ㅎㅎㅎ 이런식으로 하나하나 비교해가면서 찾는 방법이 브루트포스이다! 찾았다..

오늘은 Counting sort 에 대해서 공부해보려고 한다! 이론상으로는 신박하고, 이해하기 쉽지만 코드로 단계씩 이해하려다보니 쬐끔씩 머리가 복잡해진다 껄껄 할 수 이따..☆ 정렬알고리즘 중 하나인 카운팅 알고리즘은 집합에 각 항목이 몇 개씩 있는지 세는 작업을 한 뒤 정렬하는 알고리즘이다! 시간복잡도는 O(n + k): n 은 리스트 길이, k는 정수의 최대값이다. 퀵소트가 가장 빠르다고 알고 있었는데, 정수의 최대값이 무한대로 크지 않는 이상 카운팅소트도 어마무시하게 빠른 정렬알고리즘이었다,,!!! (무지했던 나 반성해,,,,,) 여튼! 예시로 카운팅 정렬을 이해해봅시다~!~! 예를 들어 for_sorting_list = [6, 6, 6, 5, 4, 3, 2, 1, 1, 0] 이라고 해보자. 먼저..
- Total
- Today
- Yesterday
- SQL
- 프로그래머스
- 운영체제
- C++
- intellij
- 5397
- 백준
- 다대다매핑
- cs공부
- Network
- IPv4
- 네트워크
- 동적프로그래밍
- Python
- 완전탐색
- 파이썬
- 코딩테스트
- dfs
- 알고리즘
- 브루트포스
- 4계층
- 코테
- SQLD
- cs
- allauth
- BFS
- 인텔리제이
- OS
- 소셜로그인
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |