프로그래밍/자료구조 && 알고리즘 9

[알고리즘] 정렬(Sort) 알고리즘

들어가기 전예를 들어 선택 정렬의 로직을 배우고 "선택"이라는 이름과 로직이 매칭이 잘 안 되었다.그러다 보니까, 로직을 강제로 암기를 하게 되고 시간이 지나면 까먹는 문제가 생긴다. 즉, 선택과 정렬 등의 단어가 왜 사용하고 있는지 어원을 이해 해보자!!!정렬 알고리즘1. 퀵 정렬(Quick Sort)동작 방법코드 작성 2. 선택 정렬(Selection Sort)어원편선택 정렬(Selection Sort)에서 선택이라는 단어는 정렬되지 않은 데이터 중에서 가장 작은(또는 가장 큰) 값을 "선택"하여 정렬된 부분으로 이동시키는 방식에서 유래했습니다. 동작 방법https://www.youtube.com/watch?v=uCUu3fF5Dws 코드 작성public class Main { public sta..

[알고리즘] 피보나치 수열의 시간복잡도

기존 알고리즘O(2^n)매 번 함수가 호출 될 때마다 또 두 번씩 호출 된다.F(n, r) { if (n  기존 알고리즘 + 메모이제이션O(n)메모이제이션을 통해 n을 두 번 호출 안하게 된다.F(n, r) { if (n 0) return r[n]; ⭐ return r[n] = F(n-1, r) + F(n-2, r);} 변형된 피보나치 수열 풀이코드O(n2^n)으로 계산은 틀렸다.2^n을 n번 반복하는 것으로 때문에 착각할 수 있다.allF은 1부터 n까지의 모든 피보나치 수를 계산하고 출력  F(1): O(2^1)F(2): O(2^2)F(3): O(2^3)...F(n): O(2^n)O(2^1 + 2^2 + 2^3 + ... + 2^n-1 + 2^n)= 2^n - 2 + 2^n= 2 *..

[알고리즘] 빅오(Big-O) 표기법

What is Big-O?알고리즘의 실제 실행 시간을 표기하는 것보다는 데이터 또는 사용자의 증가율에 따라 알고리즘의 성능을 예측하는 것이 목표Mathematical notation that describes algorithm efficiencyTime & Space complexityDescribes the growth rate of algorithms용어 정리n, m: 함수의 매개변수로 입력의 크기를 의미할 때 사용.  O(1) - const time인자로 받는 데이터의 크기 상관없이 일관되게 0의 위치에 있는 값을 확인F(int[] n) { return (n[0] == 0)? true:false;}  O(n) - 선형 시간(linear time)인자로 n개의 데이터를 받으면 n번 루프(loop)를 ..

[탐색] DFS vs BFS - 간단 정리

💡 유튜브 및 인프런을 보고 정리한 내용입니다! 문제시 해당 글은 삭제하도록 하겠습니다.  DFS vs BFS 만약 우리가 넷플릭스의 드라마를 볼 때 어떤 유형의 스타일인가? 하나를 몰아본다  ⇒ DFS(깊이 우선 탐색)여러 개를 하나씩 본다 ⇒ BFS(너비 우선 탐색) 그래프: 여러 개채들이 연결되어 있는 자료 구조 / 정점(node)과 노드(edge)로 이루어진 자료 구조탐색: 특정 개체를 찾기 위한 알고리즘 그래프  + 탐색 = 그래프(를) 탐색(하는) 알고리즘  그래프로 정보를 정리하는 이유는 탐색을 하기 위해서 이다.(문제를 풀 때, 입력 값을 이차원 배열 등의 방법으로 정리한다.) 그래서 우리는 dfs 또는 bfs 를 검색하면 아래와 같이 그래프가 그려진 이미지들을 볼 수 있다.  DFS: ..

[Java] 큐(Queue)

★내용 추가 필요★ 참고 사이트 https://st-lab.tistory.com/181 큐(Queue) 자바에서 제공하 큐는 인터페이스 가장 큰 특징은 ⭐FIFO(First In First Out) ⭐이다. 👉 큐 인터페이스를 구현한 클래스 PriorityQueue(우선순위 큐) ArrayDeque(배열 양방향 큐) LinkedList(연결리스트) ⇒ List, Deque, Queue 로 상속 받을 수 있다. ArrayList 랑 헷갈릴 수는데 그 외, 👉 큐 인터페이스의 메서드 인텔리제이 등의 IDE에 들어가서 인터페이스 클릭을 해보자! add offer 마지막에 요소를 추가, 가득 차면 에러 던짐 ⇒ add 마지막에 요소를 추가, 가득 차면 에러 안 던짐 ⇒ offer remove pool 첫 번째 ..

[Python] 해시 테이블(Hast Table)

해시 테이블 👉 key - value 데이터 하나의 key와 그 key 에 해당하는 value를 합쳐서: key - value 쌍 이라고 한다. 하나의 key 에는 하나의 value 만 있어야 한다. 👉 Direct Access Table 인덱스 대신 key 를 사용한다고 보면 된다. 사용하는 인덱스는 5 이지만, 배열의 크기는 943개를 사용하고 있다. 효율적으로 key -value 쌍을 저장하고 가져올 수 있지만, 낭비하는 공간이 너무 커진다. 👉 해시 테이블 개념 해시 함수 특정 값을 원하는 범위의 자연수로 바꿔주는 함수 해시 함수의 조건 해시 테이블의 해시 함수는 결정론적이어야 된다. 똑같은 key를 넣었을 때, 항상 똑같은 결과가 나와야한다. 결과 해시값이 치우치지 않고 고르게 나온다. 아무 숫..

[Java] 배열(Array)

★ 본 내용은 "코드잇의 자바 객체지향 프로그래밍" 및 " 김영한의 자바 입문" 을 듣고 정리한 내용입니다. ★ 배열이란?같은 타입의 여러 변수를 하나의 묶음으로 다루는 것참조변수(score)를 통해서 배열을 관리연속적으로 붙어있다.크기를 변경할 수 없는 정적 배열이다.int[] score = {10, 20, 30, 40, 50}배열 선언 및 생성배열을 선언하고 생성을 해야만 메모리 공간(저장)이 할당된다.int[] score; // 1. 배열 score를 선언(참조변수)score = new int[5]; // 2. 배열의 생성(int 저장공간)int[] score = new int[5]; // 3. 배열 선언과 생성을 동시 배열 초기화배열의 각 요소에 처음으로 값을 저장하는 것⭐ 배열을 선언과 생성만 ..

[Python] 링크드 리스트(Linked List)

💡 본 내용은 코드잇 기본 자료구조들 강의 및 신찬수 교수님의 자료구조 강의를 들고 요약한 내용입니다. 내용이 부족하거나 잘 못 될 수 있습니다. 추후 계속 공부하면서 수정하겠습니다~!! 링크드 리스트(Linked List) 데이터를 순서대로 저장해준다. 요소를 계속 추가할 수 있다.(동적 배열처럼) 연결된 박스(노드)들의 순서: 규리 → 태호 → 동욱 →유나 → 현승 👉프로그래밍적으로 생각 노드(Node): 데이터와 Next 의 객체이다. 연속적으로 되어 있는 것이 아닌 실제 메모리에는 ★흩어져★ 있다. # ------------- 간단한 링크 노드 ------------------- class Node: """링크드 리스트의 노드 클래스""" def __init___(self, data): self...

[Python] 배열(Array)

💡 본 내용은 코드잇 기본 자료구조들 강의 및 신찬수 교수님의 자료구조 강의를 들고 요약한 내용입니다. 내용이 부족하거나 잘 못 될 수 있습니다. 추후 계속 공부하면서 수정하겠습니다~!! 👉 배열(Array) 가장 기본적인 순차적인(Sequential) 자료구조 C 언어의 배열 크기가 고정돼 있다. 지우거나 삭제 불가능 같은 타입의 데이터만 담을 수 있다. 메모리에 연속적으로 저장 python의 리스트 C의 배열과 다르게 연속적일 수 있고 아닐 수 있다. 메모리에 값을 저장하는 것이 아닌 ★레퍼런스를 저장★ 따라서, 자료들의 크기가 상관이 없기 때문에 여러 타입들을 저장할 수 있다. Question 파이썬은 레퍼런스도 저장하고 실제 값을 저장하는 곳도 따로 있나? 그래서 더 많은 메모리를 사용한다??? ..