분할정복법(Divide & Conquer) 큰 문제를 작은 문제로 분할해 재귀적으로 해결 -> 최종적으로 내가 원하는 출력을 얻을 수 있다. 예 : 가장 큰 수 구하기 # 하나를 고르고 나머지 중 제일 큰 수 A = [3, 0, -5, 7, 2, -4, 6, 9] Max(A) = max(A[0], max(A[1:])) T(n) = O(n) # 반으로 나눠서 각각 가장 큰 수를 구하고 두 개 중 큰 수 A = [3, 0, -5, 7, 2, -4, 6, 9] max(A) = max(max(A[0:4]), max(A[4:])) T(n) = O(n) 예 : 입력받은 수의 제곱을 구하기 # 하나씩 차근 차근 곱해주기 power1(a, n): if n == 1 : return a return a * power1(a..
선택(Selection) 문제 입력 : n개의 값과 k (1 어떤 알고리즘도 최소 일정 횟수만큼 비교를 해야한다. 상한과 하한이 같다면 최소한의 비교 횟수로 원하는 값을 찾을 수 있다는 뜻이다. -> 완전히 풀림 k = 1, n : 최대값, 최소값 찾기 - 왼쪽에서부터 하나씩 비교하면 2n - 3 n - 1 번 비교 -> 최대값 n - 2 번 비교 -> 최소값 - 토너먼트 방식으로 비교하면 3/2n - 2 -> 상한, 하한 n - 1 번 비교 -> 최대값 토너먼트 1차전에서 탈락한 n / 2에서 비교를 해 (n / 2) - 1 번 비교 -> 최소값 k = 1, 2 : 제일 작은 값, 두번째로 작은 값 - 왼쪽에서부터 하나씩 비교하면 2n - 3 최소값 -> n - 1 번 비교 두번째로 작은 값 -> n ..
재귀(Recursion) 재귀함수 = 함수 내부에서 한번 이상 자신의 함수를 호출하는 것 재귀알고리즘 = 알고리즘 내부에서 한번 이상 자신의 알고리즘을 다시 적용해서 문제를 푸는 것 예1 #1부터 n까지 더하는 재귀함수 def sum(n): if n == 1 : return 1 return sum(n - 1) + n 위 재귀함수의 시간복잡도는 T(n) = O(n)이 된다. 1. n == 1 테스트 : 바닥조건 (base case) -> T(1) = 1 or C 2. 재귀호출 -> T(n) = 점화식 예2 # a부터 b까지 더하는 재귀함수 def sum(a, b): if a == b : return a if a > b : return 0 m = (a + b) // 2 return sum(a, m) + su..
프로그램을 측정할 때 - 하드웨어와 소프트웨어 환경이 상이 - 다양한 크기의 입력이 존재 이런 것들에 영향을 받지 않고 객관적으로 알고리즘이 어느 정도 성능을 보이는지 측정하고 비교하는 방법을 필요로 하게 되었다. 객관적인 측정을 위해 가상컴퓨터(RAM) + 가상언어 + 가상코드의 조건에서 성능을 측정한다. 가상컴퓨터(RAM) 기본 연산이 1단위 시간내에 수행된다고 정의한 가상의 컴퓨터 기본연산 배정연산, 대입연산, 복사연산 : a = b 산술연산 : +, -, *, /, % 등 비교연산 : =, ==, != 논리연산 : and, or, not 비트연산 : bit별 and, or, not 가상언어 가상컴퓨터 위에서 돌아가는 언어, 아래와 같은 사항을 만족하는 가상의 언어 기본연산을 표현할 수 있어야한다...
SSL의 동작방식 SSL은 암호화된 데이터를 전송하기 위해 공개키와 대칭키를 혼합하여 사용한다. 실제 데이터 : 대칭키 대칭키의 키 : 공개키 악수 -> 전송(세션) -> 세션종료 1. 악수 브라우저와 서버는 서로 상대방이 존재하는지, 상대방과 데이터를 주고받기 위해서는 어떤 방법을 사용해야 하는지를 파악한다. 서버의 인증서를 클라이언트에게 전송, 클라이언트&서버가 서로 처리할 수 있는 암호화 기법을 교환한다. 1. 클라이언트 측에서 생성한 랜덤 데이터로 클라이언트가 지원하는 암호화 방식들과 세션 아이디를 서버로 전달한다. (Client Hello) 2. 서버 측에서 생성한 랜덤 데이터와 클라이언트가 전달한 암호화 방식 중에서 서버 쪽에서도 사용할 수 있는 암호화 방식을 선택해서 인증서와 함께 클라이언트..
SSL 인증서 이해의 핵심 1. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보증 2. SSL 통신에 사용할 공개키를 클라이언트에게 제공 CA(Certificate Authority) 어떤 사이트가 신뢰할 수 있는 사이트인지 보장, 보증하는 역할을 하는 조직들을 말한다. Root Certificate라고도 한다. SSL을 통해서 암호화된 통신을 제공하려는 서비스는 CA를 통해서 인증서를 구입해야 한다. 사이트에 대한 신뢰성이 확보되어있는 직접 사용하는 서버, 사내에서 사용하는 서버에서 SSL의 보안기능을 사용하고싶을 때는 스스로 CA의 역할을 해 사용할 수 있다. 하지만 퍼블릭한 서비스에서 이 방식을 사용하면 좋지 않은 사용자 경험을 줄 수 있다. 사설 인증기관을 사용하면 https를 사용하기는..
HTTP (Hypertext Transfer Protocol) html을 전송하기 위해서 만들어진 통신 규약 HTTPS 마지막의 S는 Over Secure Socket Layer의 약자 http에 보안장치가 결합되어있는 방식의 통신, 전송하는 데이터가 암호화되기 때문에 제삼자는 몰래 볼 수 없다. SSL https와 ssl은 같지만 다르다. ssl 프로토콜 위에서 https가 동작하기 때문이다. SSL과 TLS 네스케이프에 의해서 SSL이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀌었다. SSL 디지털 인증서 서버 간의 통신을 제삼자가 보증해주는 전자화된 문서 클라이언트가 서버에 접속하면 서버는 클라이언트에게 인증서 정보를 전달한다. 접속..
- Total
- Today
- Yesterday
- TS
- React
- 구름에듀
- 제로초
- js
- scss
- vue
- 드림코딩
- vscode
- 김버그
- 비주얼스튜디오코드
- 스파르타코딩클럽
- 타입스크립트
- map
- 깃
- 코딩앙마
- javascript
- Python
- 회고
- git
- CSS
- 저스트코드
- 파이썬
- Til
- html
- 제이쿼리
- Typescript
- 리액트
- 코드잇
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |