일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Cookies
- queue
- DFS
- 백준
- deque
- 퀵정렬
- 알고리즘
- 데이터엔지니어링
- BFS
- 데이터엔지니어
- PYTHON
- 분할정복
- stack
- Data Engineering
- 고득점KIT
- sql
- Merge sort
- olap
- 웹기초
- OLTP
- Sessions
- 병합정렬
- 챗봇
- divide and conquer
- 탐색알고리즘
- QuickSort
- Chatbot
- 프로그래머스
- SQL스터디
- 데이터파이프라인
- Today
- Total
목록전체 글 (11)
Trey
프로그래머스 데이터 엔지니어 4기 수업을 진행하면서, Max님의 권유로 오랜만에 SQL 기본 문제들을 쭉 풀어봤습니다. 수업은 PostgreSQL로 진행이 되지만, 프로그래머스 kit에서는 Oracle과 MySQL만 지원하여 조금이라도 더 비슷한(?) MySQL로 풀이했습니다. 문제 이름, 주소, SQL의 구성으로 해당 Kit의 모든 문제에 대한 solution 예시들을 올려놓았으니 기초 문제 푸시는 분들은 참고해주시고, feedback은 언제든지 환영입니다 :) github.com/TreyYi/Programmers_SQL_kit TreyYi/Programmers_SQL_kit SQL 고득점 Kit. Contribute to TreyYi/Programmers_SQL_kit development by cr..
BFS문제들을 풀다보면, x와 y좌표를 큐에 넣고 빼는 경우가 많습니다. (예: www.acmicpc.net/problem/1926) 물론 상황에 맞게 적용하면 되겠지만, 1) 큐를 생성한 후에 리스트 또는 튜플 자료형으로 큐에 저장하거나 2) 큐를 생성할 때, array안에 array객체를 넣어서 초기화해주어야 나중에 x와 y로 popleft()를 할 때 에러없이 사용 가능합니다. 쉽게 이해할 수 있도록 아래의 예를 들어보겠습니다. 큐를 생성할 때, 리스트로 원소들을 바로 저장할 경우 아래처럼 iterable 에러가 납니다. # 리스트로 바로 저장했을 경우 q = deque([1,2]) x, y = q.popleft() # TypeError: 'int' object is not iterable 위처럼 ..
데이터베이스란? (DB, Database) 여러 사람이 공유하고 사용할 목적으로 조직한 **데이터의 집합** 관계형 데이터베이스란? (RDB, Relational Database) 2차원 테이블 형식을 사용하여 데이터를 정의하고 설명하는 데이터 모델 데이터베이스 관리 시스템이란? (DBMS, Database Management System) 데이터베이스 생성, 조회, 수정, 삭제와 같은 조작을 할 수 있는 환경을 제공하는 응용 소프트웨어 각종 응용 프로그램이 데이터베이스에 접근 할 수 있는 인터페이스를 제공 복구, 권한관리와 같은 보안성 기능 제공 SQL, NoSQL을 사용하는 데이터베이스의 종류 SQL : MySQL, Oracle, MS-SQL, PostgreSQL, MariaDB 등 NoSQL (No..
백준 1764번: 듣보잡 (www.acmicpc.net/problem/1764) 💡접근 제한 시간 : 2초 듣도 못한 사람 리스트, 보도 못한 사람 리스트에서 중복 원소를 찾아야하는 문제이다. 두개의 리스트를 만들어 이중 for loop으로 모든 원소를 비교할 경우, 최악의 경우 50만x50만 = 2500억번의 연산을 해야하므로 시간초과가 날 수 있다. 따라서, 탐색하는 시간이 O(1)걸리는 python dictionary를 사용해서 풀어보면 어떨까? 먼저, 듣도 보도 못한 종류의 관계없이, 이름을 key값으로 가져가고, key가 처음 생기는 경우라면 1을 넣어준다. → 삽입에 총 O(n) 시간복잡도가 소요됨 key값이 앞에서 만들어져있는 상태에서 또 같은 key값이 입력값으로 들어온다면, 해당 key값..
백준 1676번: 팩토리얼 0의 개수 (www.acmicpc.net/problem/1676) 💡접근 시간 제한 : 2초 구해야 하는것은 팩토리얼 결과값의 1의 자리부터 0이 나오지 않는 첫번째 숫자까지 0의 개수를 구하는것이다. 단순히 팩토리얼을 다 계산한 다음에 뒤에서부터 0의 개수를 세면 되지 않을까? ⚠️ 일단 문제에서 가장 큰 수인 500!의 자릿수는 무려 528이다... ⚠️ 역시 파이썬...! Python3.0부터는 int에 사이즈가 없어져서 자료형은 int를 사용해도 될 것 같다. https://docs.python.org/3/whatsnew/3.0.html#integers 팩토리얼을 계산한 후에 뒤에서 0의 개수를 세는 방법으로 풀겠다. 💡배운점 및 오답원인 다른 사람들의 풀이를 보니, J..
백준 1620번: 나는야 포켓몬 마스터 (www.acmicpc.net/problem/1620) 💡접근 시간 제한 : 2초 포켓몬을 리스트에 저장하고, 숫자로 변환 가능한 경우 index-1로 검색, 숫자로 변환 가능하지 않은 경우는 이름으로 index 검색하자. isdigit() 함수의 시간복잡도는 O(n)이다 → 한 문자열의 최대 길이가 20이니까, 최악의 경우 20x10만 = 200만이다. (이 함수는 시간초과랑 크게 관련 없을듯) 풀이코드1번으로 하니까 시간초과가 났는데, index 함수의 시간복잡도는 O(n)이기 때문에, 10만개의 포켓몬들 중에서 찾을때는 최악의 경우 매번 10만번을 탐색한다.. 즉 10만x10만 = 100억번. 그럼 데이터 읽기 부분을 어떻게 개선 시킬 수 있을까? → 해쉬 자..
백준 1541번: 잃어버린 괄호(www.acmicpc.net/problem/1541) 💡접근 첫번째 숫자 다음 숫자부터, 마이너스 부호가 있을경우 다음 마이너스 부호가 나타나기전까지의 숫자들을 괄호처리하여 더한다. (아래의 그림을 참고하면 쉽게 이해될 것이다) 그리고 마이너스 부호가 없는 입력값의 경우는 다 더하기! 참고로, 예시를 보니 숫자의 위치는 바뀌지 않고, 괄호로 묶는다고해서 부호가 바뀌지는 않는다. 💡배운점 및 오답 원인 생각보다 예외조건 처리하는것이 까다로웠다.. 💡풀이 코드 input = input() # 마이너스 부호가 있으면 분류하기 if '-' in input: subs = input.split('-') # 마이너스 부호가 있었던 숫자들의 합 구하기 subs_sum = 0 for i ..
OLTP란? (On-Line Transaction Processing) OLTP는 트랜잭션 기반으로 하는 데이터 작업입니다. 예를 들어, 카드, 은행 거래에서 일어나는 트랜잭션 단위의 활동이 이에 해당합니다. OLAP란? (On-Line Analytical Processing) OLAP는 데이터 집계를 효율화하는 접근 방법중의 하나입니다. 예를 들어, OLAP에서는 카드 사용으로 쌓인 트랜잭션 데이터로 연간대비 실적, 월간 실적 집계와 같은 데이터로 분석하기 위해 여러 복잡한 쿼리를 적용합니다. 쉽게 말해, 트랜잭션으로 쌓인 데이터를 분석 목적으로 집계하고 가공하는 프로세스를 OLAP라고 생각하면 될 것 같습니다. OLTP OLAP 원천 데이터 트랜잭션 단위의 데이터 트랜잭션 데이터로 집계한 데이터 쿼리..

백준 Z문제(www.acmicpc.net/problem/1074)를 풀다가 분할 정복 개념을 다시 공부해야겠다고 느껴서 공부도 할 겸, 정리도 한번 할겸 이 글을 써봅니다! 1. 분할 정복(Divide and Conquer) 알고리즘이란? 2. 병합 정렬이란? 3. 병합 정렬 시간 복잡도 1. 분할 정복(Divide and Conquer) 알고리즘이란? 어떤 문제를 재귀적으로 분할, 정복, 그리고 결합하는 3단계의 방법으로 해결하는 기법입니다. 1) 분할 (divide) : 원래 문제를 더 작은 단위로 나눈다. - 예시) 병합 정렬에서 길이가 8인 원소를 길이가 4인 두개의 리스트로 나누는 단계 2) 정복 (conquer) : 문제의 단위가 해결하기에 충분히 작아졌다면, 종료 조건을 가지고 문제를 해결한..

저의 첫 데이터 엔지니어링 프로젝트를 Github에 올렸습니다! :) Fastcampus Data Engineering 강의를 마칠때쯤, Facebook Chatbot 프로젝트를 하면서, 데이터 파이프라인을 만들어보았습니다. 대부분의 코드는 강의에서 본 것이지만, 직접 코딩하고 코멘트를 남기면서 전체적인 파이프라인을 이해할 수 있었습니다. 제가 강의를 들으며 만든 Facebook Chatbot에서는 아티스트를 검색하면, 해당 아티스트의 인기차트/앨범 등이 나오는 Spotify링크와 아티스트의 장르는 무엇인지 간략하게 소개해줍니다. 현재는 코로나때문에 Facebook에서 앱 검토를 중단해서 배포하지 못하고 있지만ㅠㅠ, 추후에는 다른 프로젝트도 구상해서 실제 사람들이 사용할 수 있도록 만들어보려고합니다. 아..