2022 스터디/알고리즘 스터디[2022] 4

정렬

1. 선택 정렬 시간복잡도: O(n^2) 제자리 정렬 알고리즘 중 하나 0번째에 올 원소, 1번째에 올 원소... 이렇게 선택해 가져오는 정렬 전체중에서 가장 "작은 것" 을 계속 반복해서 비교해야 함 1. 최소값을 찾는다 2. 그 값을 맨 앞에 위치한 값과 교체한다 3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체 '다음'에 있는 원소들 중 '가장 작은 거' 작은 순서대로 바뀐다. 비교횟수: n-1, n-2, n-3 ... 2, 1번 n번이n/2번 있는 것 n * n/2 = 1/2n^2 -> 시간복잡도가 O(n^2) -이중 선택 정렬: 한 번의 탐색에서 최솟값과 최댓값을 같이 찾는 방법. 탐색 횟수가 절반으로 줄어듬 2. 삽입 정렬 시간복잡도: O(n^2) 정렬되어 있는 부분에 새로운 원소를..

[Greedy] 체육복

https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr def solution(n, lost, reserve): students = [-1] + ([1] * n) students[0] = -1 for i in lost: students[i] -= 1 for i in reserve: students[i] += 1 for i in range(1,n+1): if students[i] > 1: if students[i-1] ..

[DFS/BFS] 타겟 넘버

DFS/BFS 두 가지 방식 모두 그래프를 탐색하는 방법이다. 그저 그래프를 탐색하는 것 만으로도 해결될 수 있는 문제가 많기 때문에 그래프 탐색은 중요하다. 그래프 그래프는 정점과 간선들 사이의 유한 집합으로 이루어진 자료구조의 일종. 정점은 노드라고도 불리며, 간선은 링크라고도 불린다. (정점:vertex, 노드:node, 간선:edge, 링크:link) 그래프의 표현방식 인접 행렬: 2차원 배열 그래프의 정점 수: n n*n의 2차원 배열인 인접행렬로 표현할 수 있다. ex) M[i][l] = 1 (i과 l이 연결되어 있을 때) M[i][l] = 0 (연결되지 않을 때) 정점이 3개라면 다음처럼 표현될 수 있다. [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 1 1 0 1 1 0 0 ..

[해시] 완주하지 못한 선수

https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 해시를 모르고 풀었을 때의 코드 def solution(participant, completion): flag = 0; answer = '' com = completion for i in participant: flag = 1; for l in com: if i == l: flag = 0; if flag == 1: answer = i brea..