목록전체 글 (86)
아보카도 Blog

이번주 SQL에서는 Join에 대해 배웠다. Join은 두 테이블의 공통된 정보 (Key)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것이다. 만약 checkins 테이블 정보와 users 테이블 정보를 함께 보고 싶다면? 조인을 쓰면 된다. 두 테이블에서 공통되는 필드를 꼽아 join ... on ... = ... 이런 식으로 쓰면 되는 것이다. 이 때 공통되는 필드를 key라고 한다. 엑셀로 따지면 vlookup이랑 같다. select * from point_users left join users on point_users.user_id = users.user_id 이 중 우리는 Left Join이라는 왼쪽에다 붙이는 조인과, Inner Join이라는 NULL 부분 빼고 교집합 부분만 보이는 조..
오늘은 아침에 일찍 일어나서 스택 복습하고 큐와 해쉬 개념을 익혔다. 그리고는 알고리즘 마지막 강의를 들었다. 스택(push, pop, peek)과 큐(enqueueu, dequeue, peek)에 대해 배웠다. 정렬을 다룰 땐 집중하기 힘들어서 그냥 알고리즘 3주차 숙제를 풀었다. 쓱 최대로 할인적용하기는 각 정렬의 데이터를 내림차순으로 정렬한 후 값을 뽑아 새로운 배열에 더하면서 저장하는 문제였다. 괄호 짝짓기에서는 직전에 열린 괄호를 체크하는, 즉 가장 마지막 노드를 탐색하는 스택을 구현했다. 멜론 베스트 앨범 뽑기는 여러 단계를 거쳐가야 해서 굉장히 어려웠다. 해쉬에서 배운 key와 value를 배열 형태로 추가해주고, 각 장르별 1,2순위 곡들을 다른 배열에 추가해서 정렬 후에 인덱스 값으로 반..

이번 주에는 큰 개념 두개를 배웠다. 하나는 정렬이오 또 하나는 스택과 큐에서 구현할 수 있는 메소드들이다. 이번주는 연습 문제를 푸는 데 시간이 굉장히 많이 걸렸다. 찬찬히 살펴보자. 1. 정렬 Sort 정렬이란 데이터를 순서대로 나열하는 방법이다. 첫째와 둘째를 비교하고, 둘째와 셋째를 비교하면서 오랜 시간이 걸리는 버블 정렬, 배열 전체를 훑어보고 가장 작은값부터 0번째 인덱스에 넣고, 그 다음 작은 값을 1번째 인덱스에 넣으면서 정렬하는 선택정렬, 1번째 인덱스에 있는 데이터를 0번째 인덱스와 비교하고, 2번째 인덱스에 있는 데이터를 1번째, 0번째 인덱스와 비교하면서 중간에 끼워넣는 삽입정렬, 배열을 각각의 배열로 쪼개서 각 배열을 토너먼트식으로 합치는 병합정렬에 대해 배웠다. 각각의 정렬을 코..
오늘은 강의보다는 연습문제를 풀이하는데에 집중을 더 많이 했다. 그래도 배운 내용을 정리하면, 스택이랑 큐를 배운 다음 정렬을 배웠다. 스택은 LIFO로, 한쪽 끝으로만 자료를 넣고 뺄 수 있다. top에 데이터 넣을 때 push(), top에 데이터 추출하고 없애기는 pop(), top의 데이터 조회는 peek() 큐는 FIFO로, 한쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있다. self.head와 self.tail로 구성되어 있다. rear에 데이터 넣을 때 enqueue(), front에 데이터 추출하고 없애기는 dequeue(), front에 데이터 조회는 peek() 아직 앞과 뒤, top과 rear가 헷갈린다... 오늘 배운 정렬은 버블정렬, 선택정렬, 삽입정렬. 각각의 코드는 다..
오늘은 아침에 자료구조 알고리즘 특강을 듣고 오후에는 3주차 정렬과 스택에 대해 배웠다. 강의 시간도 늘어나고, 중간중간 연습문제 푸느라 일시정지하는 것까지 생각하면 한 강당 30분에서 1시간은 걸렸다. 오늘 조금밖에 공부하지 못했다고 생각했는데, 이런식으로 생각하니 그래도 앉아있었던 만큼은 했구나 싶어서 뿌듯하다. 오늘 공부했던 것들을 찬찬히 살펴보면, 1. 정렬 Sort 정렬이란 데이터를 순서대로 나열하는 방법이다. 버블정렬, 선택정렬, 삽입정렬, 그리고 병합정렬에 대해 배워보자. 1) 버블정렬 Bubble Sort 첫째와 둘째 원소 비교, 둘째와 셋째 원소 비교, ... , 마지막-1과 마지막 원소의 비교 및 교환하면서 정렬한다. 파이썬에서의 원소 교환 방법은 a,b = b,a로 간단하다. 이중반복..

와 넘 어렵다! 특히나 숙제에서 배달 음식이 메뉴에 있는건지 이진탐색으로 확인하는 것과(전에 만든 폼을 활용) 숫자들을 +- 해서 원하는 목표값을 도달하는 경우의 수를 세는 것이 어려웠다. 그래도 첫번째 문제였던 끝에서 k번째 값 출력하기는 내 힘으로 풀었다. 나머지 두 문제도 스스로 해결할 수 있기를... 이번 주에 배운 내용들을 살펴보면, 1. 배열과 링크드리스트 배열과 링크드리스트를 호텔 방을 옮기는 일화와 기차 화물 칸을 옮기는 일화로 재미있게 풀어 배웠다. 정리하자면, 데이터에 접근이 빈번하다면 배열을, 삽입/삭제가 빈번하다면 링크드리스트를 사용하는 것이 효율적이다. 2. 클래스Class와 객체 Object, 생성자Constructor, 메소드 Method 사람이라는 클래스 안에 수정, 미희이라..
오늘 알고리즘 특강에서는 시간복잡도와 배열, 링크드리스트에 대해 배우고, 링크드리스트의 클래스, 데이터 추가, 원소 찾기, 원소 추가 실습을 해보았다. 1. 시간 복잡도 시간복잡도는 문제를 해결하는 데 걸리는 시간과 입력의 함수 관게로, 최악의 경우를 기준으로 O()값을 계산한다. 아래 함수들의 시간 복잡도를 비교해보자 #사례1 input = [3, 5, 6, 1, 2, 4] def find_max_num(array): for num in array: #배열의 길이만큼 연산이 실행된다.배열의 원소갯수 = N for compare_num in array: #배열의 길이만큼 연산이 실행된다.N if num < compare_num: #비교 연산이 1번 실행된다 break else: return num # 총..
오늘은 자료구조, 알고리즘 2주차 강의를 들었다. 숙제는 문제가 3개나 되길래 내일 해야겠다고 다짐만 했다. 자기 전에 오늘 배운 내용을 간단히 살펴보자. 1. 배열 Array 배열이란 순차적으로 데이터를 저장하는 공간이다. 크기가 정해져있기 때문에 한 번 정해지면 바꿀 수 없다. 배열에서는 각 원소에 즉시 접근 가능하다. 즉, 상수시간 내에 접근할 수 있다. O(1) 배열에서 원소를 중간에 삽입하거나 삭제하려면 모든 원소를 다 옮겨야 한다는 문제가 있다. 배열의 모든 공간이 차있을 땐 새로운 공간을 할당해야 하므로 비효율적인 자료구조이다. 2. (링크드)리스트 Linked List 링크드리스트는 크기가 정해지지 않은 데이터 공간이다. 특정 원소에 접근하려면 연결 고리를 따라 탐색해야 한다. 즉 O(N)..