본문 바로가기

Algorithm13

DFS/BFS - 음료수 얼려 먹기, 미로탈출 음료수 얼려먹기 def dfs(x, y): if x = n or y = m: return False if graph[x][y] == 0: graph[x][y] = 1 dfs(x-1, y) #True or False dfs(x, y-1) dfs(x+1, y) dfs(x, y+1) return True return False n, m = map(int, input().split()) graph = [] for i in range(n): graph.append(list(map(int, input()))) result = 0 for i in range(n): for j in range(m): if dfs(i, j) == True: result += 1 print(result) DFS를 재귀적으로 나타냈다. 기초.. 2024. 3. 7.
삽입 정렬 삽입정렬 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입 데이터를 하나씩 확인하면서, 이 데이터는 어느 위치에 들어가는게 맞을 지 매번 계산해서 적절한 위치에 들어갈 수 있도록 해줌 선택 정렬에 비해 구현 난이도가 높지만, 더 빠르게 동작 앞쪽에 있는 원소들이 이미 정렬되어있다고 가정하고, 뒤 쪽에 있는 원소를 앞 쪽에 있는 원소의 위치 중에서 한 곳으로 들어가도록 만드는 방식으로 동작 처음 시작 시, 첫 번째 원소는 그 자체로 정렬되어 있다고 판단하고 두 번째 데이터가 어떤 위치로 들어갈지 판단. 카드 게임을 할 때, 새로운 카드가 들어오면 새로운 카드를 기존 정렬된 카드 사이 올바른 자리를 찾아 삽입함으로써 정렬이 유지되도록 하는 것과 같음. array = [7,5,9,0,3,1,6,2,4,8.. 2023. 12. 18.
선택 정렬 정렬(sorting) : 데이터를 특정한 기준에 따라 순서대로 나열하는 것 일반적으로 문제 상황에 따라 적절한 정렬 알고리즘이 공식처럼 사용된다. 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 매번 가장 작은 것을 선택한다는 의미에서 '선택'정렬 알고리즘이라고 한다. array = [7,5,9,0,3,1,6,2,4,8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스. 맨 처음 시작은 0번째 인덱스로 for j in range(i+1, len(array)): # 처리되지 않은 데이터에서 if array[min_index] > array[j]: min_index = j array[i], ar.. 2023. 12. 17.
시간복잡도 시간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 시간 복잡도가 높다 == 수행 시간이 길다 시간 복잡도가 낮다 == 수행 시간이 짧다 공간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 공간 복잡도가 높다 == 많은 메모리가 필요하다 공간 복잡도가 낮다 == 많은 메모리가 필요하지 않다 가장 빠르게 증가하는 항만 고려하면 된다.(상한) -> 연산 횟수가 3N^3 + 5N^2 + 1000000이라면 O(N^3)으로 표현 - 좋은 것 부터(빠른) O(1) :상수 시간 O(logN) : 로그 시간 O(N) : 선형 시간 O(NlogN) : 로그 선형 시간 O(N^2) : 이차 시간 O(N^3) : 삼차 시간 O(2^n) : 지수 시간 O(N!) : 팩토리얼 시간 .. 2023. 12. 6.