알고리즘&자료구조 10

[알고리즘] 선택 정렬, 삽입 정렬

정렬 알고리즘(Sorting Algorithms): 데이터를 특정 순서로 정렬하는 알고리즘 선택 정렬(Selection Sort): 배열의 가장 최소값(or최대값)을 선택해서 배열의 앞부분으로 이동시키는 방식.배열 전체에서 최소값(or최대값)을 찾음그 값을 배열의 맨 앞에 위치한 값이랑 교환맨 앞에 정렬된 애들을 제외하고, 위 두 과정 반복 ▶ 선택 정렬 구현 코드def selection_sort(arr): # 함수정의, 배열받기 n = len(arr) # n = 배열길이 for i in range(n): # i반복 : 0부터 ~ n-1까지 (i = 기준인덱스) min_idx = i ..

[알고리즘] 선택정렬, 삽입정렬코드

선택정렬def selection_sort(arr): # 함수정의, 배열받기 n = len(arr) # n = 배열길이 for i in range(n): # i반복 : 0부터 ~ n-1까지 (i = 기준인덱스) min_idx = i # 최소인덱스 = i로 지정해놓고 비교시작! for j in range(i + 1, n): # j반복 : i+1부터 ~ n-1까지 (j = 비교인덱스) # 엥? 근데 i=7일때는?? if arr[j] 최소인덱스값 swap해줌. # 결과 : 배열의 (앞에서 i개 제외..

[알고리즘] 피보나치 수열, 메모이제이션

피보나치 수열: 처음 두 항을 1과 1로 정하고, 그 다음 항부터는 앞의 두 개의 항을 더해 만드는 수열1 ,  1 ,  2 ,  3 ,  4 ,  5 ,  13 ,  21 ,  34 ,  55 ,  ·  ·  ·이 수열에 속한 수를 피보나치 수라고 한다.f(0) = 0 으로 시작하기도 함첫 번째 피보나치 수 f(1) = 1두 번째 피보나치 수 f(2) = 1세 번째 피보나치 수 f(3) = f(2) + f(1) = 2네 번째 피보나치 수 f(4) = f(3) + f(2) = 3n 번째 피보나치 수 f(n) = f(n-1) + f(n-2) ▶ n 번째 피보나치 수 구하는 코드 만들어보기def fibonacci(n): # 함수정의, 결과는 n번째 피보나치 수 if n == 1 o..

[알고리즘] 재귀함수

재귀함수 : 자기자신을 다시 호출함재귀호출되면 그 전의 함수는 Stack에 쌓임.return을 만나면 본인이 호출되었던 위치로 되돌아감. ▶ print( )가 먼저, 재귀호출이 나중에 있을 때def recursive_func(n): # 함수선언, n 받아옴 if n == 0: # n = 0 이면 return # 함수 끝 else: # f(5)에서 n=5 이면 print(n, end=' ') # 5 프린트 하고 나서 # 5 recursive_func(n-1) # 재귀호출 f(4), 처음으로 돌아감 ..

[알고리즘] 버블 정렬(Bubble Sort)

정렬 알고리즘(Sorting Algorithms): 데이터를 특정 순서로 정렬하는 알고리즘버블 정렬(Bubble Sort): 가장 직관적이고 단순하지만, 다른 정렬에 비해 단점이 많음.정렬 알고리즘 중에 젤 안좋은애임. 원래 젤 안좋은 것부터 배운다고 함  버블 정렬 알고리즘의 과정입미다 예시 리스트 [3, 2, 1, 4, 0]  맨 앞(0번째, 1번째)의 두 요소를 비교해서 '앞의 숫자가 더 클 경우' 에는 두 요소의 위치를 변경해준다. (swap) 그 다음엔 1번째와 2번째 요소 비교하고, 앞의 숫자가 더 크니까 위치를 변경해줌. 다음으로 2번째와 3번째 요소를 비교했는데, 앞의 숫자가 더 작다. 그럼 위치변경이 일어나지 않는다. 그냥 아무일도 안일어나고 다음이 이어서 진행됨. 다음 이어서 3번째와 ..

[자료구조] Linked List 클래스 정의

스쿼드 숙제! 연결리스트 클래스를 정의하는 예제 코드 해석해보기연결리스트 덕질한다는 기분으로 한줄한줄 주석 작성했다.class Node: # Node 클래스를 만들어보겠습니다. def __init__(self, data): # 초기화. 클래스를 인스턴스화 해서 객체를 생성할 수 있음. data를 인자로 받아오기. self.data = data # 노드가 저장할 데이터 self.next = None # 다음 노드를 가리키는 참조, 초기값은 No..

[자료구조] 스택 Stack

스택 (Stack): 후입선출의 자료구조 중 하나이다.LIFO (Last In First Out) : 마지막에 들어온 데이터가 제일 먼저 나감FILO ( First In Last Out) : 첨에 들어온 데이터가 제일 늦게 나감둘 다 똑같은 말이고 스택의 특징이다.  스택은 프링글스다! 바닥이 막혀있고, 데이터를 하나씩 위로 쌓아가는 구조다.그래서 처음에 집어넣은 데이터는 가장 아래에 깔려있기 때문에, 데이터를 다시 꺼낼 때 맨 마지막에 나가게 된다.반대로 젤 마지막에 집어넣은 데이터는 가장 위에 올려져 있기 때문에, 다시 꺼낼 때 맨 먼저 나가게 된다.  처음에 스택에 데이터가 들어있지 않고 비어있는 상태이면isEmpty 는 True이고,스택의 길이는 0이다.  push() 함수를 통해 스택에 데이터를..

[자료구조] 스택 - 키보드 Backspace / 괄호문법검사기

스쿼드 숙제! 키보드 Backspace 기능 구현하기input_string = ‘123//45/6789///’/를 만나면 앞의 값을 삭제해라맨앞에 /를 만나면 어떻게 처리할지 생각해보기answer = '146'열심히 생각해서 만든 코드def backspace_string(input_string): # 함수정의(문자열받기) stack = [] # 변수선언 stack = 빈리스트 for i in input_string: # 문자열 돌면서 각요소 i에 할당 if i == '/': # i가 /인 경우 : if stack != []: # [stack]이..

[자료구조] 배열 vs 연결리스트

배열(Array) / 연결리스트(Linked list) 배열연결리스트크기고정동적주소연속불연속데이터 검색(참조)O(1)O(n)데이터 추가/삭제O(n)O(1)배열 (Array): 같은 타입의 변수들로 이루어진 집합으로, 연속공간에 값이 채워져 있는 형태.  'A', 'B', 'C', 'D', 'E' 라는 데이터가 있다. 이 데이터들을 배열로 저장해볼거다  먼저 연속적으로 붙어있는 상자를 구해준다. 데이터가 5개니까 상자도 5칸(= 배열은 선언할 때 크기가 미리 지정된다)  각 상자(데이터가 들어갈 주소)들에는 차례대로 번호가 부여되는데, 이 번호를 '인덱스' 라고 한다.  0부터 시작하기 때문에 인덱스는 초기값을 기준으로 주소가 떨어진 거리에 해당한다.ex) 첫번째 데이터는 인덱스 0, 두번째 데이터는 인덱..