소개 DBMS 선택하기

책너두 6기 2일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.1 ~ p.24 2일차 01 소개 DBMS 선택의 기준 : 자기가 가장 잘 활용 할 수 있는 DBMS여야 하지만, 안정성 성능과 기능 커뮤니티나 인지도 순서로 고려할 수 있다. 02 설치와 설정 2.1 MySQL 서버 설치 설치 부분은 이미 이전에 다른 블로그를 보고 설치했기 때문에 넘어갔다. 2.2 MySQL 서버의 시작과 종료 윈도우는 MySQL Workbench라는 GUI를 통해 쉽게 제어할 수 있다. 책의 내용은 리눅스 운영체제의 내용을 다루고 있어 넘어갔다. ...

2023년 9월 5일 · 2 분 · 배준수

MySQL 공부 시작

책너두 6기 1일차 책 : Real MySQL 1권 주제 MySQL에 관한 모든 것. 독서 방법 읽고 ‘그렇구나’가 아니라, 적용해보고 따라해보고 손으로 익히자. 책너두에 임하는 다짐 그동안 내가 사용한 데이터베이스는 MongoDB 뿐이었다. 취준을 하다보면 느끼겠지만 SQL 관련하여 코딩테스트를 진행하기도 하고, 기술스택으로도 많이 요구한다. 진작에 공부했어야 했지만 미루다가 책너두를 통해 할 수 있는 원동력을 얻었다. 꼭 완주하자.

2023년 9월 4일 · 1 분 · 배준수

동시성(1)

책너두 5기 25일차 로버트 C. 마틴의 클린코드 p. 226~ p.229 내용 정리 13. 동시성 동시성과 깔끔한 코드는 양립하기 어렵다. 동시성이 필요한 이유? 동시성은 결합(coupling)을 없애는 전략이다. **무엇(what)**과 **언제(when)**을 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 밀접하다. **무엇(what)**과 **언제(when)**를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다. 따라서 시스템을 이해하기 쉽고 문제를 분리하기도 쉽다. 예시: 서블릿(Servlet) 서블릿은 웹 혹은 EJB 컨테이너 아래서 돌아가는데 컨테이너는 동시성을 부분적으로 관리한다. 웹 요청이 들어올 때마다 웹 서버는 비동기식으로 서블릿을 실행한다. 원칙적으로 각 서블릿 스레드는 다른 서블릿 스레드와 무관하게 자신만의 세상에서 돌아간다. 서블릿 프로그래머는 동시성을 정확히 구현하도록 각별한 주의와 노력을 기울여야 한다. 그럼에도 서블릿 모델이 제공하는 구조적 이점은 아주 크다. ...

2023년 9월 4일 · 2 분 · 배준수

파이썬 알고리즘 : 트리의 지름, 운동, 짐 챙기는 숌

2023년 9월 4일 알고리즘 문제풀이 문제 1 백준 1167 문제 링크 1차 시도 나의 생각 입력값을 list로 받은 후 가장 앞인 0번 index는 어떤 정점의 정보인지를 나타낸다고 생각하였고 그 이후 둘 씩 짝지어서 도착 정점과 거리로 설정하였다. 이를 바탕으로 인접리스트를 만들고 index를 2씩 뛰어넘어 -1이 나오면 더이상 정보가 없으므로 다음 줄로 넘어갔다. 이후에는 두 점간의 거리를 bfs를 통해 탐색하도록 하였다. 모든 점간의 거리를 찾아 최댓값을 도출하였다. 하지만 메모리,시간초과가 뜬다… 다찾아보면 안되나보다. ...

2023년 9월 4일 · 7 분 · 배준수

파이썬 알고리즘 : 임계경로, 단지번호붙이기, 케빈 베이컨의 6단계 법칙

2023년 9월 2일 알고리즘 문제풀이 문제 1 백준 1948 문제 링크 1차 시도 나의 생각 위상정렬을 이용해 풀고자 하였다. 단 시작지점은 진입차수가 0인 것이 문제의 조건이므로 큐에 시작도시를 넣고 반복하였다. 결국 도착지에 갈때까지 비용을 계속 더해주고, 간선을 이용할 떄마다 카운트 해주었다. 예제를 입력했을 떄 결과값이 실제 정답보다 크게 나오기도 했고, 경로 탐색이 내가 예상한대로 되지 않았다. 아무래도 문제를 제대로 이해하지 못한채 그냥 위상정렬만 적용해서 해결하지 못하고 있는것 같다. 애초에 이 문제를 왜 위상정렬로 풀어야 하는지도 모르겠다.. 공부해봐야겠다. ...

2023년 9월 2일 · 7 분 · 배준수

파이썬 알고리즘 : 줄 세우기, 장난감 조립, 그래프 수정

2023년 9월 1일 알고리즘 문제풀이 문제 1 백준 2252 문제 링크 1차 시도 위상정렬에 대한 개념을 다 까먹어서 어떻게 풀지 감이 안왔다.. 해서 위상정렬을 공부해보고 풀었다. 위상 정렬(topological sorting)은 유향 그래프의 꼭짓점들을 변의 방향을 거스르지 않도록 나열하는 것을 의미한다. 쉽게 말하면 순서가 정해져있는 작업을 차례대로 수행할 때 순서를 결정하는 방법이다. 이번 문제도 어떤 학생들은 순서에 맞게 배열해야 하니 위상 정렬 문제로 풀 수있다. 위상 정렬의 과정은 다음과 같다. 방향이 있는 간선들의 정보가 주어지면 인접그래프를 만든다. 정점의 번호를 index로 하는 배열을 만든 후 해당 정점이 도착지가 되는 간선이 있을 떄마다 정점의 값을 1 올린다. 이 정점의 값이 진입차수를 의미한다. 해당 정점으로 진입하는 간선이 몇개인지를 나타내는 것이다. 위 과정이 완료되면 값이 0인 정점은 큐에 삽입한다. 큐에서 한 정점씩 꺼내어 해당 정점과 연결된 간선을 모두 제거한다. 이 과정에서 값이 0이 된 정점은 큐에 삽입하고 과정을 반복한다. 큐에서 꺼내지는 순서가 작업의 순서이다. 이 문제에 대입해보면, 문제의 입력값에서 순서가 있는 학생이 주어진다. 학생을 정점이라 생각하고 배열의 선후관계를 간선의 방향이라고 생각하면 된다. 코드는 다음과 같다. ...

2023년 9월 1일 · 5 분 · 배준수

파이썬 알고리즘 : 치킨치킨치킨, 중량제한, 중복 빼고 정렬하기

2023년 8월 31일 알고리즘 문제풀이 문제 1 백준 16439 문제 링크 1차 시도 나의 생각 세 종류의 치킨을 고르는 것은 조합(Combination)을 이용했다. 근데 라이브러리를 사용하지 않고 3중 for문으로 구현했다. 라이브러리 쓰는 법도 익혀야지.. 어쩄든 한 사람은 세 종류의 치킨 중 선호도가 가장 높은 것으로 점수를 나타내니 최소힙을 이용하되 음수로 바꾼 후 넣은 후 heappop하여 점수를 구했다. 그리고 각 조합 때마다 현재까지 최고 점수랑 비교하며 업데이트 해주었다. 결과 정답 코드 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 32 import sys from heapq import heappop, heappush n, m = map(int, sys.stdin.readline().split()) graph = [] for _ in range(n): graph.append(list(map(int, sys.stdin.readline().split()))) def cal(): max_val = 0 for i in range(m): for j in range(m): if j == i: continue for k in range(m): ans = 0 if k == i or k == j: continue for person in range(n): arr = [] heappush(arr, -1*graph[person][i]) heappush(arr, -1*graph[person][j]) heappush(arr, -1*graph[person][k]) tmp = heappop(arr) tmp *= -1 ans += tmp max_val = max(max_val, ans) return max_val answer = cal() print(cal()) 문제 2 백준 1939 문제 링크 ...

2023년 8월 31일 · 3 분 · 배준수

4. 분할정복

4.분할정복 4.5 점화식을 풀기 위한 마스터 방법 T(n) = aT(n/b) + f(n) 마스터 방법은 위와 같은 점화식을 푸는 기본 지침을 제공한다. 여기서 a≥1, b>1 인 상수이고 f(n)은 점근적으로 양인 함수다. 마스터 정리 정리 4.1 (마스터 정리) a≥1, b>1 인 상수이고 f(n)이 양의 함수라 하고, 음이 아닌 정수에 대해 T(n)이 다음 점화식에 의해 정의된다고 하자. T(n) = aT(n/b) + f(n) 여기서 n/b는 ⌈n/b⌉ 또는 ⌊n/b⌋을 뜻하는 것으로 이해한다. 그러면 T(n)의 점근적 한계는 다음과 같다. ...

2023년 8월 29일 · 3 분 · 배준수

파이썬 알고리즘 : 숫자 짝꿍, 최고의 집합, 하노이의 탑

2023년 8월 28일 알고리즘 문제풀이 문제 1 프로그래머스 숫자 짝꿍 문제 링크 1차 시도 나의 생각 두 문자열에서 각 숫자가 몇번 등장하는 지를 확인한다. 사용할 수 있는 수는 각 숫자의 등장 횟수 중 적은 쪽이다. 예를 들어, 숫자 5가 X에서는 3번, Y에서는 7번 등장한다면 짝꿍을 위해 숫자 5는 3번 쓰일 수 있다. 짝꿍은 가장 큰 수를 나타내야 하므로 사용 가능한 정수 중 큰것부터 소모하면 된다. 사용 가능한 숫자가 0만 있을 경우와 아무것도 없을 경우도 조건문을 통해 따로 체크한다. ...

2023년 8월 28일 · 3 분 · 배준수

창발성

책너두 5기 24일차 로버트 C. 마틴의 클린코드 p. 216~ p.223 내용 정리 12. 창발성 창발적 설계로 깔끔한 코드를 구현하자 켄트 백이 제시한 단순한 설계 규칙 네 가지가 소프트웨어 설계 품질을 크게 높여준다. 다음은 중요도 순이다. 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 단순한 설계 규칙 1: 모든 테스트를 실행하라 테스트가 불가능한 시스템은 검증도 불가능하고, 출시되어선 안된다. 테스트 케이스가 많을수록 개발자는 테스트가 쉽게 코드를 작성한다. 따라서 철저한 테스트가 가능한 시스템을 만들면 더 나은 설계가 얻어진다. ...

2023년 8월 26일 · 2 분 · 배준수