[Udemy] Learn Python GUI programming using Qt framework 시작 Programming...



그새 못참고 지른 Qt 강의.

PySide 라는 프리 라이센스의 파이썬용 Qt 라이브러리에 대해서 학습한다.

안드로이드와 알고리즘 학습으로 바쁜 와중 병행한 이유는 꼭 만들고싶은 응용 프로그램이 있었기 때문.

대충 스탠드얼론 형태지만 확장시켜서 온라인상의 여러 사용자가 협업하는 툴로도 사용하고 싶은 것이 내 계획.

처음 생각난 것은 여러 번 다뤄보고, 익숙한 C++ 의 MFC, 또는 C#이었다.

두 개 다 실제 테스트프로그램 형태로 어플을 제작해본 경험이 있기에 어렵지 않았.... 을 뻔했으나,

생산성의 측면과 크로스 플랫폼의 이점, 그리고 Qt creator 등의 멋진 툴, 네트워킹 등의 이유로 Qt를 시도했다.

또한 C++ 의 Qt 보다는 새로이 도전하는 마음에서 Python 의 Qt 를 선택했다.

더 이상 한 가지 언어에 종속되는 것도 싫고 스크립트 언어의 매력에 반했기 때문이다.

아직 두 시간도 배우지 않았는데 벌써 창을 만들고 컴포넌트들을 배열하는 것을 보니 내 선택이 옳았다는 생각이 든다.

앞으로 얼마나 강력한 툴을 배울 수 있을지... ㅎㅎ.

빠르게 배우고, 내가 만들고 싶은 것을 정교하고 멋지게 만들어보자.

[baekjoon] 알고리즘 기초 강의 리뷰 Algorithm...



1강. 알고리즘과 입출력

알고리즘이란 어떠한 문제를 해결하기 위한 동작들의 모임이다.

알고리즘 공부에 가장 효과적인 방법은 문제 풀이.

알고리즘 공부하는 방법에 대한 조언들...

시간복잡도 - 작성한 코드가 얼마나 시간이 걸릴지 알 수 있다!

일반적으로 시간복잡도 내에 가장 큰 입력 범위를 넣었을 때 1억이 1초 정도의 시간이다.

1초가 걸리는 입력의 크기 : O(N) 에서 1억, O(NlgN)에서 5백만, O(N^2)에서 1만 O(N!) 에서 10.

각종 입출력 문제들 소개 및 풀이. 별찍기 문제.


2강. 자료구조

스택 : 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조. push, pop, top, empty, size 등의 연산.

C++ 의 경우 주로 STL 의 stack 을 사용하여 구현.

스택 구현 문제, 스택을 이용한 괄호 문제, 쇠막대기 문제, 에디터 문제 풀이.

큐 : 한 쪽 끝에서만 자료를 넣을 수 있고 다른 쪽에서만 자료를 뺄 수 있는 자료구조. push, pop, front, back, empty, size 등의 연산.

C++ 의 경우 주로 STL 의 queue 를 사용하여 구현.

큐 구현 문제. 조세퍼스 수열 문제.

덱 : 양 끝에서 자료를 넣고 양 끝에서 뺄 수 있는 자료구조.

아스키코드에 대한 설명.

알파벳 문제, 단어 길이 문제, ROT13 암호화 문제.

문자열 to 숫자 변환 방법 (stoi, stol 등...)

네 수 문제, 접미사 배열 문제.


3강. 다이나믹 프로그래밍

큰 문제를 작은 문제로 나누어 푸는 알고리즘.

다이나믹 프로그래밍의 다이나믹은 아무런 의미도 없다 (그냥 멋져서 붙인 말).

다음 두 가지 속성을 만족해야 다이나믹 프로그래밍으로 문제를 해결할 수 있다.

- Overlapping Subproblem : 큰 문제와 작은 문제를 같은 방법으로 풀 수 있다. 문제를 작은 문제로 쪼갤 수 있다.

- Optimal Substructure : 문제의 정답을 작은 문제의 정답에서 구할 수 있다.

다이나믹 프로그래밍에서 각 문제는 한 번만 풀어야 한다.

따라서 어딘가에 메모를 하는 것이 가장 중요. Memoization 기법들.

다이나믹 프로그래밍의 두 가지 기법 - TopDown, BottomUp.

TopDown - 문제를 작은 문제로 나눈다. 작은 문제를 푼다. 이제 문제를 푼다.

=> 주로 재귀호출을 통해 구현된다

BottomUp - 문제를 크기가 작은 문제부터 풀어나간다. 문제 크기를 조금씩 크게 만든다. 그러다보면 원래 문제를 풀 수 있다.

=> 주로 큐를 통해 구현된다.

다이나믹 프로그래밍 문제 풀이 전략.

- 문제에서 구하려고 하는 답을 문장으로 나타낸다.

- 이제 그 문제에 나와있는 변수의 수만큼 메모하는 배열을 만든다.

- 문제를 작은 문제로 나누고, 수식을 통해서 해결해야 한다(점화식 등).

다이나믹 문제 풀이.

1로 만들기, 2xn 타일링, 2xn 타일링2, 1,2,3 더하기, 붕어빵 판매하기, 쉬운 계단수, 오르막 수, 이친수, 스티커, 포도주 시식,

가장 긴 증가하는 부분 수열, 가장 큰 증가하는 부분 수열, 가장 긴 감소하는 부분 수열, 가장 긴 바이토닉 부분 수열, 연속합,

계단 오르기, 제곱 수의 합, 타일 채우기, 파도반 수열, 합분해, 암호코드 등.


4강. 수학 1

알고리즘 문제 풀이에 필요한 수학 지식 및 적용 방법.

나머지 연산 (문제 풀이 결과가 너무 클 경우 보통 나머지를 구하시오~ 하는 방식으로 나옴)

나머지 연산의 수학적인 성질 설명.

최대공약수(GCD) 구하는 법, 유클리드 호제법.

최소공배수(LCM) 구하는 법.

최대공약수와 최소공배수 문제 풀이, GCD 합.

진법 변환 1, 2 문제 풀이 (10진수 -> N진수, N진수 -> 10진수, M진수 -> N진수)

8진수 2진수, -2진수, Base Conversion 문제 풀이.

소수 : 약수가 1과 자기자신 밖에 없는 수.

N의 소수 여부는 1부터 루트N 까지만 확인해보면 된다.

소수 찾기 문제 풀이, 에라토스테네스의 체 - 소수 찾는 가장 빠른 방법.

소인수분해, 팩토리얼, 팩토리얼 0의 개수, 조합 0의 개수 찾기 문제.


5강. 정렬

많은 정렬 알고리즘이 있다.

선택정렬, 삽입정렬, 버블정렬, 퀵정렬, 병합정렬, 힙정렬....

직접 만들기보다는 STL 에 있는 sort 를 사용하는 것이 좋다(간편하고 검증된 알고리즘).

수 정렬하기, 좌표 정렬하기 2 문제 풀이.

Stable Sorting : 같은 것이 있는 경우에 정렬하기 전의 순서가 유지되는 알고리즘을 Stable-Sorting 알고리즘이라 한다.

(대표적으로 시간 복잡도가 NlgN 인 Merge Sort 가 있으며 STL 에서는 stable_sort 로 쓸 수 있다.)

나이순 정렬, 국영수 문제 풀이.

정렬 문제 풀이.

카드, K번째 수, 버블 소트 문제.


6강. 그래프 1

그래프 : 자료구조의 일종. 정점(V)과 간선(E)으로 이루어지며 G = (V, E) 로 나타낸다.

경로 : 정점 A 에서 B로 가는 방법.

싸이클 : 정점 A에서 다시 A로 돌아오는 방법.

유향 그래프, 무향 그래프, 루프, 가중치, 차수에 대한 개념 설명.

그래프의 표현 : 인접 행렬, 인접 리스트, 간선 리스트. 각각에 대한 장단점.

그래프의 탐색 : 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 이 대표적이다.

DFS 와 BFS 구현 문제 풀이.

연결 요소(Connected Component). 이를 활용한 문제가 많이 나온다.

이분 그래프, 순환 사이클, 반복 수열, Term Project 문제 풀이.

플러드 필 : 어떤 요소와 연결된 모든 위치를 찾는 알고리즘.

단지 번호 붙이기, 섬의 개수, 미로 탐색, 토마토, 다리 만들기 등 문제 풀이.


7강. 트리 1

트리 : 자료구조의 일종. 사이클이 없는 그래프. 정점의 개수가 V일 때 간선의 개수는 V-1.

부모, 자식, 단말정점, 형제, 깊이, 높이, 조상, 자손, 이진 트리 등에 대한 개념 설명.

이진 트리 : 모든 노드가 자식을 최대 2개만 가지고 있는 트리.

트리의 표현 방식 - 이진 트리의 경우 배열로 표기할 수 있다. 각 인덱스에 배열, 혹은 A[i][2] 를 이용한 배열 등.

트리의 순회 : 트리의 모든 노드를 방문하는 방법이다. 그래프 탐색 방법인 DFS, BFS도 사용할 수 있지만 다음 세 가지로 나뉜다.

- 프리오더(Preorder, 전위탐색) : DLR 탐색. DFS 탐색과 동일하다. 루트 노트를 가장 먼저 탐색.

- 인오더(Inorder, 중위탐색) : LDR 탐색. 루트 노드를 중간에 둔다.

- 포스트오더(Postorder, 후위탐색) : LRD 탐색, 루트 노트를 가장 마지막에 탐색한다.

위 세 가지 방법을 사용하는 트리의 순회 문제 풀이.

트리의 부모 찾기, 트리의 지름 문제 풀이.




## 총평 ##

10 만원에 가까운 비싼 인강비가 아깝지 않을만큼 도움이 되는 강의였다고 생각한다.

2주에 가까운 빠른 시간 동안 달리다시피 해서 완강했는데, 빨리 넘어가서 중급 이상의 문제를 풀어보고 싶었기 때문.

(그래도 꾸준히 2시간, 3시간까지 고민하여 대부분의 문제는 스스로 풀었다.)

확실히, 천재가 아닌 이상 이런 문제들을 접하고 풀이법을 그 자리에서 고안해서 푸는 사람은 없을 것이다.

이런 기초적인 골격들을 이해하고 거기에 논리를 더하고 빼는 힘을 기른다면 언젠가는 쓱쓱 잘 풀 수 있지 않을까.

비록 학생 시절도 지나버린 늦깍이 공부지만, 아직은 더 배울 수 있는 시기라고 생각한다.

이제 복습도 마무리했으니 중급 난이도를 풀어보자.

작가, 블로거를 위한 필수 프로그램 10선 기타...


1 2 3 4 5 6 7 8 9 10 다음


통계 위젯 (화이트)

716
1349
6012