-
단일 태스크와 멀티 태스크 컴퓨터가 처음 등장했을 때는 단일 태스크(하나의 프로그램을 순차적으로 실행하며, CPU가 다음 작업을 처리하려면 이전 작업이 끝나기를 기다림)만을 처리할 수 있었습니다. 이는 I/O bound 작업에서 CPU가 오래 idle 상태로 있다는 자원 낭비가 있습니다. 년대에 이르러 멀티프로그래밍과 멀티태스킹 개념이 도입되었습니다. 예를 들어,...
-
ASCII ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 란 년 미국 국립 표준 협회(American National Standards Institute, ANSI)에서 표준화한 비트 문자/부호 체계로, 전신에서 사용되기 시작해 비트 컴퓨터에서도 활용되면서 현재 전세계의 컴퓨터 문자/부호 인코딩 체계에서 핵심이 되...
-
코드public class Singleton { // 클래스 내부에 유일한 인스턴스. // 초기값을 두지 않고 getInstance 에서 생성하는 것을 lazy initialization 이라 하며, 메모리를 아낄 수 있으나 동시성 문제가 있을 수 있다. private static Singleton instance; // 여기서 new Singleton(); 를 두는 것을 early init...
-
xx주로 클라이언트와 서버 간의 초기 단계 통신에 사용되며, ‘클라이언트가 요청을 계속 진행하게 하기 위한 임시 응답’ 이라는 의미를 갖는다.xx‘클라이언트의 요청이 성공적으로 처리되었음’ 이라는 의미. (OK): 수행 결과에 대한 리소스가 응답 메시지 바디에 포함됨 (Created): 요청에 따라 새로운 리소스가 생성됨. (POST 의 응답.) xx‘클라이언트의 요청에 대한 응답을 찾...
-
Java SE(Standard Edition)와 그 구현체 Java SE는 Java를 사용한 프로그램 개발에 필수적인 도구와 라이브러리 API를 정의하는 표준으로, 오픈 소스 프로젝트인 OpenJDK 커뮤니티와 협력하여 Oracle에 의해 버전이 관리되고 발표됩니다. 공개된 Java SE 버전에 대한 구현체를 JDK(Java Development Kit)라고 하며, 이는 각각의 버전에 대해 별도로 ...
-
import org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport org.springframework.context.annotation.Scopeimport org.springframework.context.annotation.ScopedProxyMode@Configur...
-
개요 컴퓨터 프로그래밍의 역사가 발전하면서 대규모 프로젝트를 개발하는 사례가 점차 늘어갔고, 이에 따라 대규모 프로젝트를 구현함에 있어 나타날 수 있는 유지보수, 모듈화, 확장성 등 여러 문제에 대한 인식이 나타나기 시작했다. 특히 년대에 그래픽 환경에서 유저 인터페이스를 제공하는 컴퓨터 시스템 구현을 시도했던 제록스의 Palo Alto Research Center (PARC)에서는 ‘스...
-
. SOP(Same-Origin Policy)- 년 Netscape .이 공개되면서 처음으로 JavaScript가 웹 브라우저에 도입됐는데, 처음 JavaScript가 도입될 당시에는 A 웹사이트에 있는 JavaScript 코드가 B 웹사이트의 DOM element 등 여러 리소스를 임의로 조작하는 것이 가능했다. 이는 만약 악의적인 의도로 쓰인 스크립트가 있다면 심각한 보안사고로 이어질 수 있는 위험 요소였...
-
. 웹 세션과 쿠키- 네트워크 관련해서 ‘세션’이라 함은 흔히 양 컴퓨터 사이 유한한 수명을 갖는 네트워크 연결을 뜻하며, 물리적 개념이라기보단 논리적 개념이다. 특히 웹에서는 서버-클라이언트 사이 연결을 뜻하는데, stateless한 HTTP 프로토콜의 특성으로 인해 온전히 HTTP만으로는 그 개념을 구현하는 것이 쉽지 않다. 년 당시 미국의 통신사 MCI가 온라인 쇼핑 웹서비스를 개발하며 쇼핑 카트 기능을...
-
. MIT License에 관한 설명MIT License는 오픈소스 라이선스 중 하나로, 배포자는 유한한 책임범위에서 소프트웨어를 자신의 저작권을 표시하며 오픈소스로 배포할 수 있고 제자는 일정 조건 하에 다음 사항을 자유롭게 할 수 있습니다. 구체적 내용은 다음과 같습니다. 배포자의 책임범위: 소프트웨어의 배포자는 소프트웨어에 어떠한 보증이나 책임이 없습니다. 사용 조건: MIT License로 라이선스...
-
. JOIN- inner join 또는 left outer join을 왼쪽 테이블에서 특정 조건에 부합하는 레코드를 추출/필터링하는 연산으로 활용할 수 있다. left outer join의 경우, join 연산 수행 후 나타나는 결과 테이블 안에 오른쪽 테이블에서 유래한 컬럼의 값이 null로 돼있는 레코드만 가져오도록 where 조건절을 작성하는 식으로 필터링을 할 수 있다.- 큰 규모의 테이블 여럿을 J...
-
DATE_FORMAT(field, '%Y-%m-%d %H:%i:%s') 리턴형: 문자열 현재 날짜 및 시간 구하기 CURDATE() 현재 날짜을 리턴한다. 리턴형: DATE형 ...
-
. 그룹함수SELECT count(field) AS cnt FROM table WHERE field >= - 테이블의 특정 컬럼에 관한 여러 통계 지표 등을 계산하는 함수를 그룹함수(aggregate function)라 하며, 그룹함수를 포함하는 쿼리를 grouping query(또는 aggregate query)라 한다. 함수명(통계 지표를 계산할 컬럼 이름)의 형식을 갖는다.- 그룹함수는 쿼리에서 S...
-
GCP VM 인스턴스에서 Flask 서버를 gunicorn과 nginx로 실행 중이라면, Let’s Encrypt의 certbot을 사용하여 무료로 SSL/TLS 인증서를 받아 HTTPS로 전환할 수 있습니다. 다음은 간단한 절차입니다: certbot 설치: sudo apt update sudo apt install software-properties-common sudo add-apt-reposit...
-
/etc/ 디렉토리의 sudoers 파일을 연다. 파일 맨 끝에 다음 내용을 추가한다. [사용자명] ALL=NOPASSWD: ALL NOPASSWD: ALL 부분을 NOPASSWD: [명령어], [명령어] 같은 형식으로 변경하면 특정 명령어를 입력할 때에만 sudo로 실행할 때 비밀번호가 실행되지 않게 할 수 있다.
-
which [명령어 실행 파일명]$ which bashwhich는 환경변수 PATH에 있는 경로 중 해당 명령어 실행 파일의 경로를 검색하는 리눅스 명령어. whereis [명령어 실행 파일명]$ whereis bashwhereis는 which와 같은 방식으로 파일에 관한 정보를 얻으나, 소스파일, 매뉴얼에 관한 정보까지 함께 얻어온다.
-
. 개요- systemd는 리눅스의 부팅부터 전반적인 서비스를 관리하는 프로세스로, 설치된 여러 패키지를 실행하거나 실행 중인 프로세스를 종료시키는 등의 작업을 수행하는 기능이 있다.- systemctl은 systemd가 프로세스를 관리하도록 하는 명령어로, 이 명령어를 통해 프로세스 관리에 관한 여러 동작을 수행할 수 있다.. systemctl의 명령어들 start [서비스명]: 서비스를 시작한다....
-
. mDNS 네트워크 프로토콜 계층 중 link 계층에서는 어떤 호스트/라우터가 자신과 연결돼 있는 인접한 다른 호스트/라우터들의 맥 주소 및 IP를 알기 위해 이에 관한 정보를 요청하는 프레임을 브로드캐스트 하며, 이러한 작업을 수행하는 프로토콜을 ARP라 한다. 한편 어떤 호스트의 OS의 관점에서도 OS가 그 호스트와 같은 네트워크 상에 있는 다른 호스트들의 IP를 알아내는 일이 필요...
-
. EV) 약간이라도 수익을 낼 수 있는 콜비용 기댓값의 상한- 승리할 확률 \(p\), 승리할 경우 얻는 팟 사이즈 \(P\)라 하고, 상대의 벳에 대한 콜비용(=상대의 벳 사이즈)을 팟 사이즈의 \(k\)배(=\(kP\))로 표현하기로 하면, 콜 액션을 하기 전 후 스택 변화의 기댓값 \(EV\)는 다음과 같다.\[EV = \ p\cdot P - (-p) \cdot k P\]- 이 값을 양수로 하는 \(k...
-
브랜치와 HEAD의 개념 기본적으로 git에서는 대부분 커밋들이 각자 단 하나의 부모 노드(커밋)를 갖는 단일한 노드로서 트리 구조로 이루어져 있으며(단, 일부 커밋은 둘 이상의 부모 커밋을 가질 수 있다), 최초의 커밋에서 여러 개의 커밋이 서로 독립적으로 만들어져 계속 부모-자식 관계를 만들어나가게 된다. 따라서 레포지토리의 어느 한 커밋을 지정하면 반드시 그 레포지토리에서 그 커밋으로 이어져오는...
-
. 매개변수(parameter)function func(param, param){ /* ... */}- 함수의 정의 부분에서 인자를 전달받는 변수를 매개변수라 한다. 영단어 parameter는 고대 그리스어 parámetros에서 왔으며 이는 ‘(무언가를) 측정하는 매개물’이라는 뜻이 있다. 본질적으로 임의의 값이 전달될 것이라는 전제 하에 어떤 값이든 가질 수 있는 ‘변수’라는 관점에서 함수...
-
. 개요- JavaScript로 크롬 확장 프로그램을 만들 수 있다. 최소 두 개의 소스파일(정해진 형식을 갖춘 manifest.json 파일, 원하는 기능을 구현한 .js 파일)만으로도 크롬 확장 프로그램을 구현할 수 있다.. manifest.json의 내용{ "manifest_version": , "name": "My Extension", "version": ".", "permissions": ["...
-
. 해싱(hashing)- 어떤 데이터셋을 앞으로 입력받아 메모리상에 저장해야 하는데, 그 데이터셋의 각 데이터가 길이가 일정하지 않을 것이라고 하자. 어떻게 저장해야 할까? 어떤 데이터가 들어올지 알 수 없으므로 각 길이마다 가능한 모든 형태의 데이터가 들어올 것이라고 가정하고 그에 해당하는 크기만큼의 메모리를 할당을 해두어야 할까? 이는 한 방법이 될 수 있지만, 지나치게 비효율적인 방법이다. 이때, 이보...
-
. 노멀 모드- 기본 모드로서, 하나 이상의 키를 입력하여 명령을 실행하는 모드. 대개 하나의 키로 명령을 수행하는 경우가 많지만 조합 방식에 따라 그 이상의 키를 입력하는 경우도 있다. 모든 모드의 기본 모드이므로, 다른 모드로 전환됐다가도 ESC키를 누르면 돌아올 수 있다.- 이 모드에서는 키 입력으로 파일에 특정 내용을 삽입할 수 없다(이는 입력모드에서만 가능). 다만 삭제 같은 명령어를 통해 내용을 수...
-
. 개요- IEEE-는 전기전자공학자협회(Institute of Electrical and Electronics Engineers, IEEE)에서 년 제정한 부동소수점의 수식 계산에 관한 표준이다. 그 전까지는 여러 하드웨어 장치에서 각자 다른 방식으로 부동소수점 연산을 구현해 각 장치가 각각 다른 문제점을 갖고 있어 이를 사용하는 것이 안정적이고 이식 가능하지 않았으나, 이 표준의 제정 이후 많은 장치들이 ...
-
. 원칙: 괄호 이용하기- 개행이 필요한 경우는 대부분 괄호를 사용하여 개행할 수 있다. 이 경우 들여쓰기는 자유롭게 넣어도 무방하다.) 원래 괄호를 썼던 경우dict = { "": , "": , "": }list = [, , , , , ]tuple = (, , , ,)list = [i for i in range()] 리스트, 딕셔너...
-
변수명, 메서드명, 함수명, 패키지명, 모듈명: 모두 소문자인 snake case를 써라. 변수명, 함수명의 경우 대부분 모두 소문자인 snake case를 쓰는 것이 추천된다. 클래스의 메서드명의 경우 lower camel case를 쓰는 경우도 많지만, 어떤 프레임워크 또는 라이브러리에서 쓰이는 클래스/객체의 경우 그 메서드가 lo...
-
지난 년 월 일 OpenAI에서 ChatGPT 서비스를 공개했다. (링크는 https://chat.openai.com/chat)언어모델은 현재까지 적혀있는 글을 입력으로 넣으면 그 글의 가장 끝에 올 확률이 가장 높은 단어를 출력하는 기능이 있는 ML 모델이다. ML 모델은 훈련 데이터셋으로부터 어떤 특징, 패턴을 추출하고 학습해 다음에 입력이 들어왔을 때 그 입력에 자신이 학습한 특징, 패턴을 반영시켜 출력...
-
import osval = os.environ['env']val = os.environ.get('env')
-
‘I/O가 병목이 아닐 수 있다’ 라는 포스트를 발견. https://news.hada.io/topic?id= 요약하면, mb 크기의 텍스트 파일을 읽어와 텍스트 파일 내 등장하는 단어들의 빈도를 세는 코드를 돌려 봤더니 텍스트 파일을 읽어오는 속도는 매우 빨랐고 텍스트 파일을 처리하는 연산 시간이 훨배 느렸다. 따라서 대량의 데이터를 처리하는 프로그램에서 텍스트 파일을 읽어오는 시간이 ...
-
. CI/CD와 GitHub Actions- 어떤 앱의 소스코드를 담고 있는 레포지토리가 있고 여러 개발자가 그 레포지토리의 소스코드를 가져와 각자 조금씩 수정을 한다 할 때, 수정을 완료한 결과물을 배포하려면 결국 각 개발자가 수정한 결과물을 하나의 레포지토리에 통합을 하는 절차가 필요하다. 이때 본래 레포지토리에서 소스코드를 가져와 수정한 후 그 결과를 빌드-테스트 해보고 이를 다시 본래 레포지토리에 통합...
-
. 개요- 파이썬은 소스코드를 한줄 한줄 실행할 때 그때마다 그 코드에서 사용하는 변수의 자료형을 결정하는 동적 타입 언어이며, 따라서 정적 타입 언어와 달리 한 변수를 한 곳에서는 정수형으로 다른 곳에서는 문자열형으로 사용하는 것이 가능하다. (다만, 파이썬은 서로 다른 자료형끼리의 연산 시 에러를 발생시키는 강타입 언어로서 같은 상황에서 암묵적으로 타입을 변환해 연산하는 약타입 언어와는 다르다.) 동적 타...
-
. 변수명 앞에 * 붙이기) 함수를 정의하면서 인자 앞에 *을 썼을 때def func(arg: int, *args_tuple: int) -> None: for arg in args_tuple: print(arg)func(, , , , )함수를 정의하면서 인자 앞에 * 표시를 쓰면, 인자로 전달받은 값들을 하나의 튜플에 담아 그 튜플이 * 표시와 함께 쓰인 그 변수명에 전달되게 된다.) ...
-
. 개요list = [, , , , ]list_iter = list.__iter__()print(list_iter.__next__()) # 이 출력된다.- iterable 객체의 멤버로서 그 객체의 각 원소를 하나씩 차례대로 순회하여 가리키고자 할 때 사용하는 객체를 iterator 객체라 한다. 파이썬의 모든 iterable 객체는 메서드로 그 객체의 iterator 객체를 리턴하는 __iter__() 메서...
-
. 웹서버 프로그램- 외부로부터 웹페이지 요청이 들어왔을 때 그 요청을 처리하여 웹페이지를 전송하는 일련의 과정을 수행하는 프로그램을 웹서버라 한다. 웹페이지 요청에 응답하는 컴퓨터 시스템 하드웨어까지 포함하여 포괄적 표현으로서 웹서버라 칭하는 경우도 있지만, 보통 웹서버라 하면 동적 컨텐츠를 생성, 배포하는 기능 없이 정적 컨텐츠만을 클라이언트에 전송하는 프로그램의 개념으로서 칭하는 경우가 많다. 사실 영...
-
. 개요- 데이터베이스 분야에서는 데이터를 잘 짜여진 스키마에 적절히 담아 동시에 여러 트랜잭션이 실행되더라도 서로간 간섭이 없고 데이터베이스의 일관성이 적절히 유지되도록 하는 것이 오랫동안 중요한 과제였으며, 이에 따라 적절히 관리된 데이터베이스 체계는 SQL으로 작성된 쿼리로 여러 데이터를 읽고 쓰기 편리한 점이 있었다. 그러나 년대에 접어들어 미리 구조를 알 수 없는 방대한 양의 데이터를 빠른 시간 내에...
-
. 개요- 어떤 DB 시스템 내에 있는 릴레이션, 뷰, 인덱스, 사용자 접근 권한 등 여러 객체에 관한 메타데이터를 그 DB의 시스템 카탈로그(system catalog)라 한다. 다른 이름으로 데이터 사전(data dictionary), 시스템 테이블(system table)이라고도 한다.- 시스템 카탈로그는 DB 시스템 내 여러 정보를 조회할 때 사용되는데, 특히 DBMS에 입력된 쿼리를 최적화해서 레코드...
-
. 개요- RDB에서 뷰(view)는 일종의 가상의 릴레이션으로, 실제 릴레이션(=기본 릴레이션, base relation)을 기초로 그것에 여러 조건문을 추가하거나 다른 릴레이션, 뷰와 join을 해서 만들어낸 derived relation이다. ‘기본 릴레이션/뷰에 대하여 selection/projection 연산을 한 것’으로 정의되며, 따라서 기본 릴레이션의 어느 한 값이 변경될 때 그에 대한 뷰 역시...
-
. 사전작업() 클라이언트: ISP와 연결 먼저 클라이언트가 웹페이지 요청을 하기 전에 클라이언트 호스트가 ISP에 연결됐을 때 (a)자신의 IP 주소를 할당받고 (b)그 다음으로 웹 브라우저에 도메인 네입을 입력했을 때 이를 처리할 가장 가까운 로컬 DNS 서버의 IP 주소 정보를 ISP로부터 얻어오는 절차가 있어야 한다. DHCP 서버에 접속해 자신의 IP 주소를 할당받는 과정에서 A...
-
. 개요- 인터넷 상의 모든 서버는 IP 주소를 통해 인터넷에 연결돼 있으므로 어떤 서버에 데이터를 요청하려면 그 서버의 IP 주소를 입력해 이를 요청해야겠지만, 실제 일반 사용자 입장에서 자신이 데이터를 요청하고자 하는 서버의 자리 숫자로 된 IP 주소를 일일이 입력해 데이터를 요청하는 건 현실적으로 난이도가 너무 높다. 이 점을 고려하여 실제 인터넷 서비스는 알파벳과 숫자로 이루어진 식별자인 도메인 네임(...
-
. 개요- 산업 현장에서 쓰이는 대규모 DB에서는 동시에 수백, 수천 이상의 수많은 사용자가 접근해 DB의 각각 다른 부분뿐 아니라 동일한 한 부분에 동시에 데이터를 읽고 쓰는 일이 빈번하다. 이처럼 수많은 사용자가 동시에 DB의 같은 부분을 두고 읽고 쓰기를 하는 경우에도 각 사용자는 마치 각 사용자들의 DB에 대한 읽고 쓰기가 서로 시간 간격을 두고 차례대로 읽기/쓰기를 수행한 것과 같은 결과를 얻을 수 ...
-
. 개요- ER 스키마를 릴레이션 스키마로 곧바로 매핑한 결과물 안에는 여러 엔티티가 실제 필요한 수보다 적은 릴레이션 안에 중복하여 존재하는 경우가 있을 수 있으며, 이 경우 데이터의 삽입/수정/삭제 때, 예를 들어 한 튜플에서는 적절히 수정되었으나 다른 튜플에서는 제대로 수정사항이 반영되지 않는 것 같은 여러 문제가 발생할 수 있다. 이러한 문제를 갱신 이상(update anomaly)이라 하며, 이러한 ...
-
. 개요- 다량의 데이터를 담고 있는 DB는 물론 주기억장치(메인 메모리)에만 저장돼있는 게 아니라 평소에는 보조기억장치(디스크 등)에 저장돼 있다가(물리적 데이터베이스) 필요할 때 DBMS에 의해 메모리로 불려져 사용되고 또 그 내용이 삽입/삭제/수정된다. 물론 보조기억장치에 데이터를 읽고 쓰는 시간은 주기억장치에 올라와 있는 데이터를 읽고 쓰는 데 비해 굉장한 시간이 소모되므로, 어떻게 하면 보다 효율적인...
-
. 개요- 어떤 기능을 갖고 어떤 엔티티를 어떤 방식으로 저장하는 데이터베이스를 구축할 것인지(개념적 데이터베이스)부터 schema를 어떻게 정의해 데이터베이스를 구축할 것인지(논리적 데이터베이스), 물리적 장치를 어떠한 방식으로 제어해 데이터베이스를 구축할 것인지(물리적 데이터베이스)를 결정하는 것을 통틀어 데이터베이스 설계라 한다.- 개념적 데이터베이스를 설계할 때 ER 모델 또는 정규화 모델을 사용하여 ...
-
. 개요- SQL은 DB에서 값을 변경하고 추출해 오는 데는 기능이 충분하지만 C나 Java 같은 언어처럼 다양한 기능을 가진 것은 아니라 DB 시스템을 구축하고 활용할 때 C나 Java 같은 언어를 활용할 필요가 있을 수 있다. 이처럼 보다 다양한 기능을 통해 DB 시스템을 구축하는 데 사용하는 언어를 host language라 하고, 그 언어 내부에서 DB를 활용하기 위해 사용하는 SQL을 embedded...
-
. triggerCREATE TRIGGER trigger BEFORE INSERT ON table WHEN table.field < BEGIN UPDATE table SET field = field * . END- DB 시스템에 어떤 절차를 규정해 두어서, 절차 내 명시된 이벤트가 발생하여 일정 조건을 충족할 때 그에 따라 특정 동작을 수행하게 할 수 있다. 이처럼 이벤트 발생 ...
-
. INSERTINSERT INTO table(field, field) VALUES (, )- 지정한 relation에 새로운 tuple을 삽입하는 쿼리다.- (그 relation의 foreign key를 통해) 다른 relation을 참조하는 relation에 tuple을 추가할 경우 (foriegn key와 primary key 사이 관계가 항상 유지돼야 한다는) 참조 무결성이 위배될 수 있다. (그러나 ...
-
. 준지도학습- 훈련데이터 중 일부에만 레이블이 있을 때, 레이블이 있는 데이터와 없는 데이터를 모두 활용해 ML 모델을 훈련시키는 기법을 준지도학습(semi-supervised learning, SSL)이라 한다.- 여러 준지도학습 방식이 제시되고 있으며, 모두 전체 데이터셋 중 레이블이 있는 데이터의 비율이 극히 적은 상황에서도 모든 데이터에 레이블이 있는 데이터셋에 크게 뒤지지 않는 오차율을 보인다.) ...
-
. 개요- 특정 입력에 대해 분류 등의 작업을 처리하도록 훈련이 되어 있는 신경망이 있을 때, 어떤 입력에 아주 미세한 오차를 더해 당초 그 신경망으로부터 기대되는 결과와 전혀 다른 결과(예를 들면, 고양이 이미지에 오차를 더했더니 개미로 분류하는 경우 등)를 얻게 해 신경망 시스템을 무너뜨리는 입력을 적대적 예제(adversarial example)라 한다.. 공격의 유형- 이러한 공격 유형으로 공격자가 공...
-
. 개인정보보호- 이름이나 연락처 같이 이를 통해 구체적 개인을 특정할 수 있는 정보를 개인정보(personally identifiable information, PII)라 한다. 이름, 나이, 주거 지역 같은 정보는 그것 하나만으로는 개인이 특정된다고 할 수 없으므로 그 자체로 개인정보의 정의에 포함되지는 않으나 이를 조합하면 개인을 특정할 수 있으므로 조합으로서 개인정보로 간주된다.- 인터넷 기술이 발달하...
-
. 개요- 서비스의 특정 기능을 새로 론칭하기 전에 기존 사용자층 전체(A그룹, 컨트롤 그룹이라고도 한다)에 곧바로 노출시키는 게 아니라 소수 사용자(B그룹=테스트 그룹)에게 먼저 노출시키고 그 반응을 기존 사용자층과 대조해본 후 노출 사용자층을 넓혀갈지를 결정하는 새 기능 검증 방식을 A/B테스트라 한다. (어떤 판단을 할지를 ‘데이터를 통해’ 결정하는 것이므로 A/B테스트 후의 결정은 data-driven...
-
* 오토인코더- 오토인코더는 깊은 신경망의 하나로, 입력 데이터가 내부 신경망의 인코더 부분을 거쳐 은닉층에 다다르면 몇가지 특정 패턴을 가진 정보들로 재해석되나 다시 디코더 부분을 거쳐 원본 입력 데이터와 최대한 비슷한 데이터로 복원되는 출력을 내는 신경망이다. 신경망을 훈련시킬 때 훈련시킬 데이터셋의 입력에 대응되는 결과가 별개로 있는 게 아니어서 대표적인 비지도학습 신경망으로 여겨지지만, 엄밀히 말해 입...
-
. 추천엔진- 서비스의 규모가 작아 서비스가 제공하는 아이템의 수가 적어 사용자가 한 눈에 모든 아이템을 파악할 수 있다면 추천엔진의 필요가 적다. 그러나 서비스의 규모가 점점 성장해 서비스가 제공하는 아이템의 수도 크게 늘어 사용자가 자신이 필요로 하는 아이템을 찾기 위해 서비스가 제공하는 검색엔진을 사용해야 할 정도 상황이라면 추천엔진의 필요도 커진다. ‘검색’이라는 활동은 사용자가 서비스 내에서 찾고자 ...
-
. Node.js의 개념- 웹 브라우저는 컴퓨터 내외부 서버에 HTTP/HTTPS 접속을 해서 HTML, XML, JavaScript 등의 코드와 CSS 등의 서식정보, 그리고 그외 음악, 사진, 동영상 등 여러 미디어 파일을 얻어온 후 코드를 해석하고 화면에 표현할 각종 요소를 렌더링하여 최종적으로 사용자에게 웹 페이지를 보여준다. 이처럼 여러 형식의 코드와 파일을 처리하기 때문에 웹 브라우저는 각 기능을 ...
-
흔히 알려진 지식으로, ‘id 선택자는 페이지 내에서 한 id가 한 엘리먼트만을 지칭하고 class 선택자는 여러 엘리먼트를 동시에 지칭할 수 있다’ 정도가 알려져 있다. 그런데 어떤 엘리먼트가 페이지 내에서 한 번만 쓰일지 아니면 여러 번 쓰일지 확신할 수 없을 때는 어떤 선택자를 쓰는 게 더 나을까? class 선택자를 쓰는 게 나으며, 한 번만 쓰일 가능성이 압도적으로 높은 엘리먼트라 하더라도 되도록이면...
-
. 커밋 메시지를 읽을 사람 코드의 총괄적인 책임자: 커밋한 사람이 쓴 코드가 커밋 메시지대로 쓰였는지를 검사. 커밋 메시지는 변화한 코드 이해를 도움. 그 커밋을 통해 발생한 버그를 고치는 사람 그외 . 커밋 메시지 역할 커밋 전후 전체적인 변화를 설명하는 메시지로, 변화의 맥락과 동기가 설명돼야 한다. 커밋 메시지 내용은 PR 설명, 코드 주석과 역...
-
* GPU 사용하기import torchis_available = torch.cuda.is_available() #현재 CPU가 사용 가능한지 확인한다.cuda = 'cuda' if is_available else 'cpu'device = torch.device(cuda)x = torch.randn(, , device=cuda)- device(‘cuda’) 메서드를 호출하면 이후 연산에서 사용할 프로세서를 G...
-
. datetime형, date형 변수import datetimenow_datetime = datetime.datetime.now() #현재 날짜, 시간을 불러와 datetime형 변수로 리턴한다.datetimedatetime = datetime.datetime(, , , ,,) #'년 월 일 시 분 초'라는 정보를 datetime형 변수로 변환해 리턴한다.now_date = datetime.date.toda...
-
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome('chromedrive...
-
import requestsfrom bs import BeautifulSoupreq = requests.get("https://klee.github.io")soup = BeautifulSoup(req.text, "html.parser")article_url_a = soup.select('div.post-list-article > li > div > h')article_urls = []for u...
-
. 추론 파이프라인Model Hub의 어떤 모델이든 pipeline()을 사용하여 텍스트 생성, 이미지 분할 및 오디오 분류와 같은 다양한 작업에 대한 추론을 쉽게 할 수 있다. pipeline()은 어떤 양식을 사용해 본 경험이 없거나 모델의 코드를 잘 알고 있지 않더라도 사용할 수 있다.파이프라인 사용법모든 작업에는 그에 관한 pipeline()이 있지만 모든 특정 작업 파이프라인을 포함하는 일반적인 pi...
-
. 개요- 서로 다른 기능을 하는 두 개의 신경망을 이용하여, 실제로는 존재하지 않지만 실제로 존재하는 것 같은 가상의 이미지를 생성하는 신경망을 만들 수 있다. (이 두 신경망의 기능이 서로 다르기 때문에 이러한 신경망을 GAN, generative adversarial network라 한다.) 년 처음 제시되었다.- 구체적으로 다음과 같은 방식으로 생성한다.() 일반적인 classification을 수행하...
-
. semantic segmentation- 주어진 이미지를 픽셀 단위로 클래스를 분류하는 문제를 푸는 것을 semantic segmentation이라 한다. (이미지 내 서로 다른 객체가 서로 다른 객체인 것까지 인지할 필요는 없고 클래스가 같은지 다른지만 알아내도 충분하다.) 인물 사진을 찍었을 때 인물과 배경을 구분하는 문제, 자율주행 차량이 카메라로 외부 정보를 받았을 때 차량과 차도와 인도와 인물을 ...
-
. 문제 정의- classification 문제가 어떤 사진에 어떤 물체가 있는지 여부를 판별하는 문제라 하면, localiazation 문제는 그 사진에서 그 물체가 어떤 위치에 있는지, 얼만큼의 영역을 차지하는지를 구하는 regression 문제의 하나라고 할 수 있다. object detection은 사진 안에서 찾고자 하는 모든 물체의 존재 여부와 있을 경우 그 위치와 차지하는 영역의 크기를 모두 구하...
-
. ML 모델 이해를 위한 팁- 다음 순서를 따르는 것이 복잡한 ML 모델을 이해하는 데 도움이 된다.() 모델이 풀고자 하는 문제를 파악한다. (분류, 생성, …)() 훈련 단계가 아니라 추론 단계부터 먼저 이해한다. 즉, ‘이미 학습이 이루어진’ 모델이 어떤 입력을 받아 어떤 출력을 내는지를 먼저 이해한다.() 훈련 단계에서는 모델의 어떤 파라미터가 학습이 이루어지는지(구조가 복잡한 모델에서는 입력으로 주...
-
. 개념 synonym similarity relatedness(연관성) sementic field: 특정 주제를 공유하는 단어들. 예를 들면, 의사, 간호사, 진료 같은 단어들은 ‘병원’이라는 하나의 주제를 공유한다. semantic frame: 어떤 행위를 하는 주체의 역할에 관한 단어들. 예를 들면, 장을 ...
-
. 개요- 문장을 시작하는 단어 몇개가 주어질 때, 그 단어들로 시작하는 하나의 완성된 문장을 만들어낼 확률을 구하는 모델을 언어모델이라 한다.- 언어모델을 이용하여 기계번역, 맞춤법 검사, 맥락에 의존하여 정확도가 높은 음성인식 등의 문제를 풀 수 있다.. 언어모델의 확률식- 어떤 문장 \(W\)를 만들어낼 확률이 \(P(W)\)이며, \(W\)는 총 \(n\)개의 token으로 이루어져 있고 각 token...
-
. 여러 개념들 vocabulary: 단어의 집합. corpus: 대용량 문서들의 집합. 어떤 언어로 돼있는지, 어떤 분야의 문서들인지, 작성자가 어떤 배경이 있는지 등을 기준으로 각 corpus의 성격이 결정된다. token: 한 vocabulary를 구성하는 말의 단위. 어떤 corpus를 NLP 알고리즘의 훈련 데이터로 하기 위해서는 우선 그 corpus를 token 단...
-
. 기본 개념) transformer- 입력으로 주어진 데이터프레임에 새 컬럼을 추가해 새 데이터프레임을 만드는 함수. 여러 프레임워크에서 transform()이라는 이름의 메서드로 호출할 수 있으며, 그 결과로 데이터프레임이 리턴된다.- ML 모델도 어떻게 보면 입력으로 주어진 데이터프레임에 ‘예측값’이라는 새 컬럼을 추가해 새 데이터프레임을 만드므로 일종의 transformer라고 볼 수 있다.) esti...
-
. 설치() PySpark, PyJ!pip install pyspark pyj() Redshift 접속에 필요한 JAR 파일들- JAR 파일 설치를 위해서는 먼저 구글 Colab에 설치된 파이썬의 버전을 확인해야 한다.!python --version- 아래와 같이 경로를 이동해 JAR 파일을 설치한다.!cd /usr/local/lib/python../dist-packages/pyspark/jars &&...
-
. Google Colab에서 PostgreSQL 쓰기) 외부 URL에서 DB 로드해오기%load_ext sql%sql <URL> #postgresql 프로토콜을 사용하는 URL을 입력하면 그 URL에 접속하여 DB를 로드한다.) 로드해온 DB에서 SQL 쿼리 사용하기%%sqlSELECT * FROM table) 로드해온 DB에서 테이블을 추출하여 pandas의 DataFrame형 변수로 담기res...
-
. 마인드- 현업에서 얻게 되는 데이터 중에 ‘깨끗한 데이터’란 있을 수 없다. 실제 데이터를 수백 개씩 일일이 살펴보며 데이터가 제대로 돼있는지 확인할 필요가 있다.- 회사의 규모가 커지면 회사의 DB에 담겨 있는 테이블 수도 어마어마하기 마련이고, 각 테이블이 각각 어떤 데이터를 담고 있는지 다 알고 있는 직원이 있을 수 없다. 이 문제를 해결하려면 각 테이블에 대한 documentation을 세심히 할 ...
-
. 빅데이터와 분산 컴퓨팅- IT 산업 현장에는 일반적인 서버 환경에서는 다루기 어려운 정도로 대량의 데이터를 처리해야 하는 경우가 있다. 이처럼 대량의 데이터를 처리하는 방법으로서 먼저 컴퓨터 시스템의 사양을 업그레이드 하는 것(scale up)을 생각할 수 있는데, 첫째로 이는 비용이 많이 소모되고 둘째로 이는 대량의 데이터를 처리하는 문제에서는 효용이 크지 않다. 대량의 데이터를 처리하는 문제에서는 CP...
-
. RNN(recurrent neural network)- 시간에 따라 값이 변하는 순차데이터를 처리하는 신경망을 RNN이라 한다.. 순차데이터의 표현- 일반적으로 벡터를 통해 표기한다. 입력 데이터의 크기는 그 데이터가 담고 있는 시간 길이에 비례하여 증가한다.- 문장을 벡터로 표현하는 방법에는 다음과 같은 방법이 있다. bag of words: 단어의 빈도수순으로 벡터의 각 성분에 단어를 대응시키...
-
* 입력 데이터셋을 표준정규분포로 정규화- 예를 들어 입력 데이터의 첫 번째 성분이 m 단위의 키고, 두 번째 성분이 kg 단위의 몸무게라면, .m의 키와 .m의 키차이는 실제로는 매우 크나 값으로는 .밖에 차이나지 않는 반면, kg의 몸무게와 kg의 몸무게 차이는 실제로는 아주 크다고는 할 수 없으나 값으로는 나 차이가 나 이를 그대로 신경망에 학습을 시키면 학습이 느리게 일어나는 모습을 볼 수 있다. 이처...
-
. 개요- deep MLP는 각 MLP 층 사이의 연결이 완전연결인데, 이 경우 학습이 매우 느리고 과적합이 발생할 수 있다. 각 MLP 층과 층 사이에 연결이 완전연결이 아니라 일부 노드끼리만 연결되는 neural network를 만들 수도 있으며 이러한 neural network를 CNN(convolutional neural network)라 한다.- CNN의 경우 격자 구조를 갖는 데이터(데이터를 구성하...
-
. 개요- 입력벡터(\(\mathbf{x}\))를 수개의 클래스 중 하나의 클래스로 할당하는 문제(예를 들면, 클래스가 \(C_, \cdots, C_K\)로 주어질 때 \(\mathbf{x}\)를 이 중 하나로 분류하는 문제)를 분류문제라 한다. 분류문제를 풀기 위한 결정이론으로서 \(k=, \cdots, K\)에 대해 모든 사후확률 \(p(C_k \mid \mathbf{x})\)을 구해볼 수 있다. (이를 ...
-
. 선형 기저함수 모델- 입력 데이터로 \(D\)-벡터 \(\mathbf{x} = \begin{bmatrix} x_ & \cdots & x_D \end{bmatrix}^T \)가 주어지고 파라미터로 \((D+)\)-벡터 \(\mathbf{w} = \begin{bmatrix} w_ & \cdots & w_D \end{bmatrix}^T \)가 주어진다 하자. 이때 \(y(\...
-
- 제곱합 손실함수가 주어질 때 입력 데이터 \(\mathbf{x}\)에 대한 최적 예측값 \(\mathbb{E}(t \mid \mathbf{x}) = \int t p(t \mid \mathbf{x}) dt\)을 \(h(\mathbf{x})\)라 하면, 손실함수의 기댓값 \(\mathbb{E}(L) = \int \{y(\mathbf{x}) - h(\mathbf{x})\}^ p(\mathbf{x})d\mathb...
-
. 개요확률변수인 \(D\)-벡터 \(\mathbf{x}\)가 \(D\)-벡터 \(\mathbf{\mu}\)를 평균으로 하고 \(D \times D\) 행렬 \(\Sigma\)를 공분산 행렬으로 하는 가우스 분포를 따른다 할 때, 이를 다음과 같이 쓴다.\[\mathcal{N} ( \mathbf{x} \mid \mathbf{\mu}, \Sigma) = { \over {(\pi)^{D/}} } { \over ...
-
. 베르누이 분포- 시행의 결과로 나오는 결과가 딱 둘뿐인 사건의 확률분포를 베르누이 분포라 한다. 그 확률변수 \(x\)가 또는 의 값만 갖는데 각각이 나올 확률 \(\mu, -\mu\)는 모른다면, \(p(x= \mid \mu) = \mu, p(x= \mid \mu) = -\mu\)로 쓸 수 있다. 이를 \(\mathrm{Bern}(x \mid \mu) = \mu^{(-x)}(-\mu)^x\)로 쓸 수 ...
-
. 개요- 어떤 확률분포가 있어 주어진 입력에 대한 확률값을 계산할 수 있을 때, 그 확률값에 기반해 최적의 결정을 내리는 이론을 결정이론(decision theory)이라 한다. 이미 계산된 확률분포를 통해 주어진 입력에 대한 확률값을 계산하는 단게(추론단계)와 계산된 확률값에 기반해 최적의 결정을 내리는 단계(결정단계)로 나뉜다.- 분류문제를 결정이론으로 접근해 보자. 예를 들어 주어진 입력 \(\math...
-
* 분류문제에서 최대우도법으로 가중치 벡터 구하기) 훈련 데이터셋을 이용한 우도함수 만들기- 어떤 실수 \(x_i\)를 입력받으면 그에 대한 결과로 \(t_i\)(\(i = , \cdots, n\))가 나와야 하는 훈련 데이터셋이 있다 하자. 이 훈련 데이터셋이 정규분포에서 추출된 표본이라 가정하고 최대우도법으로 예측함수의 가중치 벡터 \(\mathbf{w}\)를 추측할 수 있다.- 주어진 어떤 실수 \(x\...
-
. 확률변수와 확률- 어떤 사건의 가능한 모든 결과들을 원소로 하는 집합(이하 \(S\))을 정의역으로 하여 치역으로 실수집합을 갖는 함수를 확률변수(random variable)라 한다. (‘사건 결과를 수치로 그룹화했을 때, 그 수치’라고 생각할 수 있다.)- \(S\)의 모든 부분집합을 담은 집합을 정의역으로 하여 치역으로 이상 이하인 실수를 갖는 함수를 확률(probability)이라 한다. 확률이...
-
. computational graph- layer가 여러 개인 어떤 neural network를 최적화하려면 주어진 훈련 데이터셋에 대하여 갖는 loss와 그때 각 layer의 가중치 행렬의 gradient를 계산하고 가중치 행렬의 각 성분을 수정하는 과정을 여러 번 거쳐야 한다. 이때 가중치 행렬의 gradient를 구하는 과정을 최대한 간단하게 구현하기 위해, 먼저 둘 이상의 변수를 입력으로 갖는 어떤 ...
-
* gradient- \(m \times n\) 크기의 행렬 \(A\)를 인자로 갖고 함수값으로 실수를 갖는 어떤 함수 \(f\)가 있을 때, \(f\)의 gradient \(\nabla_A f(A)\)는 다음과 같이 정의된다.\[\begin{bmatrix}{ {\partial f(A )} \over {\partial A_{,}}} & \cdots & { {\partial f(A )} \ove...
-
. 이차형식(quadratic form)\[\mathbf{x}^T A \mathbf{x} = \begin{bmatrix} x_ & \cdots & x_n \end{bmatrix} \begin{bmatrix} a_{, } & \cdots & a_{, n} \\\vdots & \cdots & \vdots \\a_{n, } & \cdots & a_{n, n}...
-
. 개요- 어떤 \(n \times n\) 행렬 \(A\)에 대해, \(A \mathbf{v} = \lambda \mathbf{v}\) 을 만족하는 아닌 열벡터 \(\mathbf{v}\)와 상수 \(\lambda\)가 존재하는 경우가 있다. 이때의 열벡터 \(\mathbf{v}\)를 고유벡터, 상수 \(\lambda\)를 고유값이라 한다. 고유값은 실수가 아니라 허수부를 갖는 복소수일 수도 있다.- 기하학...
-
. range, null space- \(n\)개의 벡터로 이루어진 어떤 집합 \(A\)가 있을 때, 그 집합의 원소 벡터들의 linear combination으로 만들 수 있는 모든 벡터의 집합을 \(A\)의 span이라 한다.- \(m \times n\) 크기의 어떤 행렬 \(A\)에 대하여 다음이 정의된다. \(m \times n\) 행렬에 \(n\)-벡터를 곱하면 결과로 \(m\)-벡터를 얻는...
-
* 전치행렬\[(AB)^T = B^T A^T\]\[(A+B)^T = A^T + B^T\]\[(A^{-})^T = (A^T)^{-}\]\[det(A) = det(A^{T})\]* 대칭행렬/반대칭행렬- \(A = A^T\)일 때 대칭, \(A = -A^T \)일 때 반대칭이라 한다.- \(A A^T\), \(A + A^T\)는 항상 대칭행렬이다.- \(A-A^T\)는 항상 반대칭행렬이다.* 대각합- 정방행렬에 대...
-
. 개요- 컴퓨터가 입력된 데이터를 통해 훈련을 해 같은 작업을 전보다 더 나은 성능으로 할 수 있게 된다면 컴퓨터는 그 데이터로부터 ‘학습’을 했다고 이야기할 수 있다. 이와 같은 머신러닝의 개념은 년대에 처음 등장하여 점차 구체적으로 발전하기 시작했다.- 처음에는 인간이 추출한 규칙(rule)을 기계가 학습하는 모델을 생각했으나, ()우선 인간이 사물의 모든 규칙을 알고 있는 게 아니고 ()학습 대상이 변...
-
. .html template 파일에 다음 코드를 넣는다.() 파일 상단에 {% load static %} 추가하기{% load static %}() 정적 template 파일 경로를 다음과 같은 형식으로 쓰기<img src="{% static 'img.jpg' %}">. settings.py 소스파일에서 STATICFILES_DIRS 변수를 정의한다.STATICFILES_DIRS = [os.pat...
-
. django를 설치한다.pip install django. 새 프로젝트를 만든다.django-admin startproject project- 이때 새 프로젝트를 구성하는 소스파일들이 project 폴더에 담기게 된다. 프로젝트를 구성하는 각 소스파일들에는 다음과 같은 내용들이 담겨있다. settings.py: 그 프로젝트의 기본 설정에 관한 변수들이 저장돼 있다. 그 프로젝트를 서버로 실행했을 ...
-
. DB 스키마 적기class Table(models.Model): #models.Model이라는 클래스를 상속하는 Table이라는 클래스를 만든다. def __str__(self): #관리자 페이지에서 보여질 튜플의 이름을 리턴하는 메서드 함수 return str(self.field) field = models.IntegerField(default=, null=False) fi...
-
. 손실함수- linear classification에서 좋은 결과를 내기 위해서는 보다 나은 가중치 행렬을 얻어야 한다. 이를 위해 우선 가중치 행렬의 좋고 나쁨을 정량화할 수 있어야 하는데, 보통 손실함수(loss function)의 값을 이용해 가중치 행렬의 좋고 나쁨을 수치로 정량화한다. 그리고 손실함수를 이용해서 최선의 가중치 행렬을 구하는 과정을 최적화(optimization)이라 한다.- 손실함수...
-
. CREATE TABLE 구문의 기본 형태CREATE TABLE table( field INTEGER PRIMARY KEY NOT NULL, field TEXT, FOREIGN KEY(field) REFERENCES table(field) ON UPDATE CASCADE )- 기본적으로 CREATE TABLE 테이블명(속성명 변수형, ..., 제약조건(속성명))의 형식을 갖고 있다. ...
-
. REST- 년 Roy Fielding이 제시한 네트워크 소프트웨어 아키텍처로, ()서버와 클라이언트의 역할을 명확히 구분하고 ()전송되는 메시지의 형식과 무관하게 일관된 인터페이스로 통신하며(uniform interface) ()통신 전후 맥락과 무관하게 동일한 요청에는 동일한 처리를 거친 후 동일한 응답을 내보내는 것(stateless) 등을 특징으로 한다.- REST를 따르는 소프트웨어를 RESTful...
-
. 빈 폴더로 이동한 후 그 폴더에 가상환경을 생성한다.python -m venv .- ‘-m venv .’는 venv라는 모듈을 파이썬으로 실행해 현재 위치의 폴더에 가상환경을 생성하도록 하는 옵션이다. venv는 파이썬에 내장된 가상환경 생성 모듈로서, 지정된 경로에 가상환경을 생성한다.. 명령어를 입력하여 새로 생성한 가상환경을 실행시킨다.cd scriptsactivate- 가상환경을 생성한 폴더에서 위...
-
. 역사) 초기 역사- 년대 고양이를 통한 Hubel과 Wiesel의 포유류 시각 인지 연구. 사물의 테두리가 움직이면 그에 반응하는 단순한 세포들이 있는데 시각 인지에서는 이러한 단순한 세포들이 가장 중요. 시각 인지는 처음에는 이처럼 단순한 구조에서 시작하여 점점 복잡해져 나중에는 실제 세상을 인지. 연구 내용을 조금 더 살펴보면, ()같은 시각 인지 기능을 하는 신경세포들은 뇌의 피질의 한쪽 영역에 집...
-
. 이미지 간 유사도 평가 방법) L distance\[d_ (I_, I_) = \sum_P \left| I_^P - I_^P \right|\]- 크기가 같은 이미지의 같은 위치에 있는 각 픽셀이 갖는 값의 차이 절대값을 단순 합하여 이를 두 이미지의 L distance로 정의한다.- L distance는 좌표계가 달라지면 값도 달라진다는 문제가 있는데, 좌표계가 달라질 일 없는 문제에서라면 L distanc...
-
. matplotlib) 그래프 그리기import matplotlib.pyplot as pltfig = plt.figure(figsize=(w, h))ax = fig.add_axes([l, b, w, h])fig.axes[].plot(list, list, label="func") plt.legend() plt.show()- plt.figure() 함수를 호출하면 빈 figure 객체를 생성할 수 있다. fig...
-
* PIP- 파이썬의 공식 패키지 관리 프로그램으로, 온라인 패키지 저장소인 PyPI에 접속해 외부 모듈을 로컬 패키지에 설치하거나 삭제하는 등 여러 관리를 할 수 있다.- 로컬에서 개발한 내 패키지는 이를 개발할 당시 사용한 패키지/모듈의 그때 당시 버전에 의존하므로, 만약 내 패키지를 이를 개발한 환경과 전혀 다른 환경에서 구동하고자 한다면 그 새 환경에 내 패키지가 사용하는 패키지/모듈의 내 패키지를 개...
-
. Series) 생성import pandas as pds = pd.Series([, , , ])s = pd.Series({'one': , 'two':, 'three':}, name="random dict")s.name = "numbers"- pd.Series() 함수에 인자로 list 또는 차원 numpy.ndarray, dictionary형 등을 넣으면 그 인자와 같은 값을 갖는 pandas의 Series...
-
import numpy as npnp.random.seed() #이 메서드를 실행하면, 무작위로 난수를 발생시켜도 인자로 전달한 시드에 해당하는 난수값이 발생된다. 다시 말해, 같은 시드를 사용하여 이 메서드를 실행한 파이썬 코드는 어떤 PC에서 실행시키더라도 똑같은 난수값을 발생시킨다. arr = np.random.normal(loc=, scale=, size=(, )) #평균 , 표준편차 인 실수들이 정...
-
. 정보와 엔트로피- 정보이론에서 정보(information)는 불확실한 정도(uncertainty)를 측정하는 양의 표현(quantitative representation)으로 정의된다. 즉, 일어날 가능성이 불확실한 사건일수록 그 사건이 실제로 일어났음을 전하는 정보는 더 정보량이 많은 것(informative)으로 볼 수 있다. 이러한 정의를 따라, 사건 \(A\)의 정보량 \(i(A)\) 는 \(-lo...
-
. 모비율의 추정- 어떤 집단에서 어떠한 속성을 갖는 구성원이 차지하는 비율(\(p\))를 추정하고 싶을 때, 그 집단에서 \(n\)명의 표본을 선택한 후 그 중에서 그 속성을 갖는 구성원의 수(\(X\))를 이용하여 모비율 \(p\)를 추정할 수 있다.- 이 집단에서 크기 \(n\)인 표본을 추출하는 문제는 이 집단에서 \(p\)의 확률로 그 속성을 갖는 구성원을 \(n\)번 추출하는 독립시행을 하는 것과 ...
-
. 푸아송 분포- 전체 시간 또는 공간의 크기가 일정하게 주어지고 여기서 단위시간 또는 단위공간 당 사건이 일어날 확률이 일정할 때, 이러한 사건의 확률분포는 이항확률분포이다. 푸아송 분포는, 단위시간 또는 단위공간 당 사건이 일어날 확률을 정확히 알 수는 없으나 전체 시간 또는 공간 내에서 평균적으로 사건이 일어나는 횟수는 알 때의 확률분포다.- 푸아송 분포는 이항확률분포의 시행횟수가 무한대로 커지는 한편 ...
-
. 베이즈 정리- 어떤 표본공간을 사건 \(B_, \cdots, B_n\)이 각각 분할하고 각 사건 \(B_i\)가 일어날 확률(‘사전확률’, \(P(B_i)\))과 \(P(A \mid B_i)\)의 값(‘우도’)을 모두 알고 있을 때(단, \(i = , \cdots, n\)), \(P(B_r \mid A)\)의 값(‘사후확률’)을 다음 식을 계산해 얻을 수 있다.\[P(B_r \mid A) = { {P(B_...
-
. 결합확률분포(joint probability distribution)- 확률적으로 일어나는 사건의 결과에 따라 달라지는 값을 확률변수라 하며, 각 확률변수에 따라 그 사건이 일어날 확률을 나타낸 것을 확률분포라 한다. 어떤 사건의 결과를 둘 이상의 확률변수로 나타낼 수 있을 때 그에 대한 확률분포를 결합확률분포라 한다.- 어떤 결합확률분포가 있을 때, 이를 통해 그 사건의 한 특정 확률변수에 대한 확률분포...
-
from scipy import statsn = p = .stats.binom.cdf(x, n=n, p=p) #주어진 n과 p에 대한 이항확률분포에서 확률변수가 x보다 작거나 같을 때의 확률을 리턴한다.stats.binom.stats(n=n, p=p) #주어진 n과 p에 대한 이항확률분포의 평균과 분산을 담은 튜플을 리턴한다.loc = scale = stats.norm.cdf(x, loc=loc, scale=...
-
The page build failed for the main branch with the following error:The variable ... on line … in ... was not properly closed with .... For more information, see https://docs.github.com/github/working-with-github-pages/troubleshoot...
-
. 주성분 분석) 개요- 주성분 분석(principal component analysis, PCA)은 여러 개의 데이터들이 어떤 양상으로 분포하고 있을 때 이 분포의 주성분(그 방향으로 데이터들의 분산이 가장 큰 방향벡터)을 분석하는 기법을 말한다.- 기하학적으로 어떤 행렬의 고유벡터는 그 행렬에 관한 좌표축을, 고유값은 그 행렬이 그 고유벡터 방향으로 치우친 정도를 의미한다고 볼 수 있으므로, 여러 차원의 ...
-
. 개요) linear system- \(a_{,} \ x_ + a_{,} \ x_ = b\) 와 같이 미지수 \(x_i\)에 관한 차 방정식을 linear equation이라 하며, 이러한 linear equation 유한개의 집합을 linear system이라 한다.- \(n \times n\) 행렬 \(A\), 열벡터 \(\mathbf{x} = \begin{bmatrix} x_ \\ \vdots \\ ...
-
ERROR: Could not install packages due to an OSError: [Errno ] No such file or directory) 경로가 너무 길어서일 수 있다.- 파이썬을 Visual Studio Code 등을 통해 설치를 하게 되면 패키지가 설치되는 경로가 C:\Users\(…)\AppData\Roaming\Python\… 과 같이 매우 길어지고, 이렇게 되면 경로 길이가 윈도...
-
. 생성import numpy as nplist = [, , ]tup = (, , )arr = np.array(list)arr = np.array(tup)np.array() 함수에 인자로 리스트, 튜플 등을 넣으면 그 인자와 같은 값을 갖는 numpy의 array형 변수를 선언할 수 있다. numpy의 array형은 빠른 속도를 필요로 하는 연산에 적합하며, numpy의 여러 함수와 연산자를 사용하여 수학의 ...
-
. 개요- 인공지능 분야에서의 프로그래밍은 단순히 코드만 쓰는 것보다 주석을 써야 하는 경우가 많다. 수식을 쓰는 경우도 많고, 그 코드를 쓰게 된 맥락을 주석에 충분히 상세히 적어야 하는 경우가 많기 때문이다. 일반적인 IDE 환경에서 제공하는 주석 기능에 한계가 있다 보니 인공지능 분야에서는 이쪽 관련해서 지원이 강력한 jupyter notebook이라는 IDE를 많이 사용하고 있다. (예를 들어, jup...
-
. 행렬의 곱셈\[\begin{bmatrix} * & \cdots & * \\ \vdots & a_{i, k} & \vdots \\* & \cdots & * \end{bmatrix} \begin{bmatrix} * & \cdots & * \\ \vdots & b_{k, j} & \vdots \\* & \cdots & ...
-
. RDB model- 년대 E. F. Codd가 제안한 데이터 모델로서, ()DB 내에 여러 개의 table이 있어 각 table 내에 존재하는 모든 키값들을 각각 그 table의 이름, 그 table 내에서 각 행을 구별해주는 기본키, 그 table의 각 열의 이름을 통해 접근할 수 있으며 ()table끼리의 연산으로서 데이터를 다룰 수 있게 하는 데이터 모델이다. 이처럼 DB에 저장되는 데이터를 ‘관계’...
-
. 개요- 데이타베이스란, 상호 관련성 있는 대량의 데이터의 모음으로 컴퓨터에 저장될 수 있는 것을 뜻한다. 그 데이터는 반드시 구조화 되어 있을 필요는 없다. 데이터베이스는 컴퓨터과학의 주요 기초 분야이자 기초 시스템 소프트웨어이고 IT 분야에서 핵심적인 역할을 맡고 있어 실생활 다양한 분야에서 쓰이고 있으며 산업계의 요구도 매우 강력하다.- DBMS(database management system)는 데이...
-
. 네트워크 보안 대 요소 confidentiality: 센더와 리시버 사이 통신 내용을 제자가 보고 알 수 없어야 한다. (센더는 메시지를 암호화 해서 전송하고, 리시버는 이를 해독하여 메시지를 수신한다.) authentication: 센더와 리시버는 서로가 상대라는 것을 인증할 수 있어야 한다. message integrity: 센더와 리시버는 전송된 메시지가 도중에 변경...
-
. 개요- 가장 널리 쓰이는 무선랜 프로토콜인 와이파이의 경우 호스트들이 AP(access point)라는 전파 수신 장치를 향해 와이파이 프레임 전파를 발송하고(이처럼 하나의 AP를 향해 여러 호스트들이 전파를 쏘는 집합을 BSS, basic service set라 한다), AP는 이를 수신하여 이더넷 프레임으로 변환하여 이를 라우터에게 전송한다. 이때 발송하는 전파는 공기를 따라 퍼져나가게 되고, 여러 호...
-
. 개요- link 계층보다 상위 계층에서 네트워크 통신을 이야기할 땐, 한 호스트/라우터에서 다른 호스트/라우터로의 통신이 ‘이쪽에서 저쪽으로 패킷을 보내면 저쪽에서 패킷을 받을 수도 있고 중간에 유실될 수도 있다’라는 식으로 이야기해왔으나, 실제로는 고려해야 할 문제가 더 많다. 예를 들어, 하나의 게이트웨이에 여러 호스트들이 연결돼 있는 네트워크에서는(이런 네트워크를 LAN, local area netw...
-
. 다익스트라 알고리즘- 간선의 가중치가 양수인 그래프에서, 그래프 상의 한 정점에서 출발해 나머지 모든 정점으로 도달하는 최단경로를 구하는 알고리즘이다. 다음과 같은 알고리즘으로 수행된다) ‘시작점에서 i번 정점에 도착하는 데 걸리는 최단거리’로 dist[i] 값이 정의되는 dist 배열을 두고, i번 정점이 시작점과 인접하면 그 간선의 가중치로, 인접하지 않다면 무한대로 dist 배열을 초기화한다.) di...
-
. network 계층의 forwarding- network 계층에서는 transport 계층에서 전달받은 세그먼트를 패킷에 담아 이를 다른 네트워크 장치로 보내 최종적으로 그 세그먼트의 목적 네트워크 장치로 보내게 된다.- network 계층에서는 forwarding table이 구현돼 있어(이 구현은 별도의 알고리즘을 통해 이루어진다), 수신한 패킷의 목적지(IP 주소)를 forwarding table에서...
-
. TCP의 segment 헤더- TCP의 segement의 헤더는 다음 필드로 이루어져 있다. source port 번호 destination port 번호 sequence number ACK number: TCP의 센더와 리시버는 모두 반대로 리시버이자 센더이기도 하므로 그 segment의 헤더에는 항상 ACK number가 포함된다. 이때, TCP의 ACK ...
-
. multiplexing과 demultiplexing- 상위 계층의 여러 출처에서 여러 단위로 나온 데이터를 하위 계층에서 하나로 묶는 것을 multiplexing이라 한다. application 계층의 여러 소켓에서 나온 message를 transport 계층에서 multiplexing한 단위: segment transport 계층의 여러 segemnt를 network 계층에서 mul...
-
. 쿼리를 대문자로 써야 하는 이유- 오라클의 경우 쿼리 입력 시 그 쿼리가 예전에 수행된 적 있는지를 탐색하는데, 이전에 같은 내용의 쿼리가 입력된 적 있어도 대소문자가 다르면 다른 쿼리가 입력된 것으로 보므로 캐시를 참조하지 않고 매번 새로 탐색을 수행하게 된다. 이는 비효율적이므로, 일반적으로 쿼리를 쓸 때 키워드와 속성명을 대문자 아니면 소문자로 일관적으로 쓰도록 하는 규칙을 정해두고 쿼리를 쓰게 된다...
-
. 네트워크와 인터넷) 네트워크 장치 및 개념- 서로 다른 컴퓨터 단말기 상의 각 프로세스 사이를 여러 장치와 시스템을 통해 서로 연결한 것을 네트워크(network)라 한다. 전선상으로 두 컴퓨터를 직접 연결한 후 각 컴퓨터에서 실행 중인 프로세스끼리 연결시킨 것도 네트워크이고, 수십억 대의 단말기가 여러 전선이나 전파 그리고 이를 중계하는 각종 스위치와 라우터를 통해 연결된 인터넷도 네트워크의 일종이라 할...
-
. application 계층- 네트워크 통신은 결국 network edge의 application 계층의 프로세스 간의 정보전달이라 볼 수 있다. network 계층, link 계층, physical 계층 같은 계층들은 결국 application 계층 간의 통신을 보조하는 계층이라 볼 수 있다.- 인터넷 상의 모든 host는 각자 그 자신의 고유의 IP 주소를 가지고 있다. 이 IP 주소는 변동되는 경우도 ...
-
. 디스크의 구조- 하드웨어로서 하나의 디스크는 여러 개의 원판(platter)가 하나의 축(spindle)으로 이어져 있으며, 각 원판에는 원판에 기록된 데이터를 읽을 수 있는 헤드가 하나씩 붙어 있다.- 원판에는 원판에 저장되는 데이터들을 구분하는 균일한 크기의 최소단위인 섹터가 여럿 모여 원판을 이룬다. 축으로부터 거리가 동일한 섹터들을 ‘같은 트랙에 있다’라고 하며, 서로 다른 원판에 있으나 반지름이 ...
-
. 파일의 디스크 저장 방식) contiguous allocation- 프로세스를 쪼개지 않고 메모리의 연속된 영역에 할당하는 방법과 유사하게, 파일을 쪼개지 않고 디스크의 연속된 영역에 할당하는 방법이다.- 프로세스의 메모리 연속 할당에서는 메모리를 균일한 크기로 나누는 방법이 있었지만, 파일의 디스크 연속 할당에서는 파일 하나의 크기가 워낙 천차만별이어서 그런 식으로 디스크 크기를 균일하게 나눠 할당하거나...
-
. 개요- 비휘발성 매체에 주로 저장되는, 속하는 디렉토리가 있고 이름 단위로 구분되는 정보의 모음(collection)을 파일이라 한다. 사용자는 OS를 통해 파일의 내용을 읽거나 변경할 수 있으며, 새로운 파일을 만들거나 기존 파일을 삭제할 수도 있다. 또한 OS는 파일을 디렉토리를 통해 트리와 유사한 계층 형태로 관리하며 파일을 저장하고 제어하는데, 이처럼 OS가 파일을 저장하고 제어하는 일련의 구조 내...
-
. demand paging- 대부분의 OS는 프로세스를 page 단위로 관리하여 가상메모리에 있는 page들을 요청이 있을 때에 메인 메모리로 옮겨와 이를 사용한다. 이처럼 가상메모리의 page를 필요할 때 메인 메모리로 옮겨와 사용하는 방식을 demand paging이라 한다.- demand paging을 사용하면 다음 이점이 있다.() 중요도가 높은 page를 메인 메모리로 옮겨와 사용하므로, I/O에 ...
-
. address binding 방법의 종류) compile time binding- 코드를 컴파일을 할 때 address binding을 같이 하는 경우가 있다. 하나의 컴퓨터에 하나의 프로그램만 동작하게 하는 경우에 사용할 수 있는 방법으로, 멀티프로그래밍이 지원되는 현재 대부분의 컴퓨터에서는 쓰이지 않는 바인딩 방법이다.) load time binding- 프로세스가 메모리에 처음 로드될 때 바인딩을 하...
-
. deadlock 발생 조건- 다음 네 조건이 모두 충족될 때 deadlock이 발생한다.() 자원을 한 순간에 한 프로세스만이 사용 가능(mutual exclusion)() 프로세스가 점유하고 있는 자원은 다른 프로세스가 강제로 빼앗을 수 없음(no preemption)() 어떤 프로세스가 수개의 자원을 동시에 점유해야 작업을 처리할 수 있는데 그 중 일부 자원만 점유하고 있다 할 때, 나머지 자원을 얻을...
-
. race condition- 여러 주체(스레드, 프로세스, CPU 등)가 접근할 수 있는 공유자원을 서로 다른 주체가 동시에 조작하는 경우(공유변수의 값을 한쪽에서는 증가시키고 다른 쪽에서는 감소시키는 경우 등)가 있을 수 있다. 이러한 상황이 나타나면 프로그램이 사용자가 의도한 것과 전혀 다른 결과를 낼 수 있다. 예를 들어 프로세스 A가 한 변수의 값을 가져가 이를 증가시키는 연산을 하고 결과값을 저장...
-
. 프로세스의 상태) running- 프로세스가 CPU를 점유하고 있는 상태. running 상태인 프로세스는 I/O 장치를 동기-블록 방식으로 사용하는 경우에는 blocked 상태로 전환되고, time-share OS 하에서 타이머에 설정된 시간이 경과하여 interrupt가 발생한 경우 ready 상태로 전환된다.- 커널은 프로세스 관리자로서 프로세스와 분류가 다른 것으로 보므로, I/O 장치를 사용하는 ...
-
. 개요- 프로그램의 시작부터 종료까지 시간 중 프로그램이 CPU를 점유하는 기간을 CPU burst라 하고, I/O 장치와의 소통으로 blocked 상태에 있는 기간을 I/O burst라 한다. CPU를 사용하는 모든 프로세스들이 CPU burst가 더 많은지 I/O burst가 더 많은지를 그래프로 그려보면, 대다수 프로세스가 I/O burst가 압도적으로 많고(이러한 프로세스들을 I/O-bound pro...
-
. 개요- 크게 CPU, 메모리, I/O 장치 셋으로 나눌 수 있다. (디스크는 파일을 열어 내용을 불러와 메모리에 올린다는 측면에서 입력장치로 볼 수도 있고, 반대로 CPU에 의해 처리된 결과를 전달받아 파일의 형태로 저장한다는 측면에서 출력장치로 볼 수도 있다.)- I/O 장치의 모든 정보가 곧바로 컴퓨터의 메인 메모리와 CPU로 전달되는 것은 아니고, 각각 그 장치를 직접 통제하는 device contr...
-
. OS 개요- OS는 컴퓨터 하드웨어에 직접 설치되어 ()컴퓨터 시스템의 자원을 효율적으로 관리하고 (이는 운영체제의 가장 핵심적 기능으로, OS를 다른 말로 ‘자원 관리자’라 칭할 수도 있다) ()사용자, 다른 소프트웨어, 하드웨어를 연결하여, 사용자가 컴퓨터 시스템을 편리하게 사용할 수 있게 하는 소프트웨어 계층을 말한다.- OS가 관리하는 자원은 메모리, CPU 등 하드웨어 자원과 프로세스, 파일 등 ...
-
/* 값이 true와 false 둘뿐인 원소로 이루어진 vector에 대해 next_permutation() 연산을 수행하면, 각 인덱스별로 true 또는 false 값을 갖는 모든 경우의 순열을 구할 수 있다. 이러한 성질을 이용하여 combinations() 함수를 간단히 구현할 수 있다.*/vector<vector<int>> combinations(vector<int>...
-
'''. 숫자들이 오름차순으로 정렬된 리스트와 타겟 넘버가 주어질 때, 리스트에서 타겟 넘버가 삽입될 인덱스를 구하는 문제.. 이진탐색을 구현할 때 주목해야 할 부분들) m = (s+e)//- 범위 내 수의 개수가 짝수 -> s에서 m까지의 개수와 m+부터 e까지의 개수가 같다. - 범위 내 수의 개수가 홀수 -> s에서 m까지의 개수가 m+부터 e까지의 개수보다 하나 많다.) while s ...
-
. min-width 사용- 이미지 리스트를 감싸고 있는 태그의 display 속성이 flex라면, div로 구현된 이미지창 여러 개가 죽 늘어서면서 각각의 폭이 width로 지정된 값보다 더 줄어들게 됨. min-width로 이미지창의 폭을 지정하면 이를 방지할 수 있음.. 이미지 리스트를 감싸고 있는 태그 위에 이보다 더 상위 태그를 사용해야.<div style="width:px;overflow:hi...
-
. 개요- 하나의 엘리먼트 태그에 적용되는 css 속성이 여럿일 경우, 이들 중 우선순위가 가장 높은 속성이 그 엘리먼트에 우선적으로 적용된다.. 우선순위) !important- css 속성 뒤에 !important를 쓰면 다른 속성이 있더라도 그 속성이 최우선으로 적용된다.) HTML 문서 내 태그 안 style 속성에 직접 정의한 속성(inline style attribute)- 예를 들어 <p st...
-
. 이벤트 버블링, 캡처링- 웹페이지에 클릭, 이벤트 등 어떠한 이벤트가 발생했을 때, 자바스크립트로 이를 감지하고 그에 따라 특정한 자바스크립트 함수를 실행시키게 할 수 있다. 이처럼 이벤트를 감지하여 특정 함수를 실행시키게 하는 것을 ‘이벤트 핸들러’라 하며, 여러 방법이 있는데 addEventListener() 메서드를 이용하면 이벤트 버블링/캡처링 등을 쉽게 제어할 수 있다는 이점이 있다.- DOM 트...
-
설명 <header> 문서의 헤더. 로고, 제목, 검색 등. <footer> 문서의 푸터. 작성자, 저작권 등. <main> 문서의 메인 내용. 한 문서에 하나의 <main> 태그만 포함 가능. <art...
-
. 사용법) 외부 .css 파일을 선택적으로 적용() <link rel=”stylesheet” href=”.css 파일 경로” media=”쿼리”> 태그의 media 속성에 쿼리를 적기<link rel="stylesheet" href=".css 파일 경로" media="쿼리">() <style> 태그 안에 @import url(경로) (쿼리); 구문을 쓰기<style>...
-
'''. 덧셈 기호를 사용하지 않고 두 정수의 덧셈을 하는 문제.. XOR, AND 비트연산으로 덧셈을 구현할 수 있다. XOR 연산은 덧셈 시 각 자릿수가 갖는 값과 같은 값을 리턴하고, AND 연산은 덧셈 시 그 자릿수에서 자리올림이 발생하는지를 알려준다. 자리올림이 나타날 때마다 XOR 연산을 반복해, 더 이상 자리올림이 나타나지 않을 때까지 루프를 수행한다.. 위 연산 방법은 덧셈 하려는 두 수...
-
. 문제최대 무게 K까지 담을 수 있는 배낭에 무게 W[i], 가치 V[i]인 N개의 물건 중 가능한 많은 물건을 담아 가치의 총합을 최대로 하고자 할 때, 그 가치 총합의 최댓값을 구하는 문제.. 풀이배낭에 담을 수 있는 최대 무게 K가 아주 크지 않다면 간단한 다이나믹 프로그래밍으로 풀 수 있다.dp[i][j]: 배낭에 i번째 물건을 담아 무게가 j가 되었을 때 배낭에 담긴 물건들의 가치 총합의 최댓값위와...
-
* 백준에 제출한 코드를 IDE로 가져와 디버그할 때 콘솔 입력을 파일입력으로 바꾸기input = open("in.txt", "r").readline파이썬에서 백준의 파일 입력은 input() 함수를 사용하는데, input() 함수는 줄 단위로 문자열로 콘솔 입력을 받는 함수로서 파일 입력 관련해서 지원되는 함수 readline()과 기능이 거의 동일하다. 따라서 input이라는 이름의 변수를 open().r...
-
'''. 슬림프: 길이가 글자면 AH일 것. 글자 이상이면 AB+슬림프+C 또는 A+슬럼프+C일 것. 슬럼프: D 또는 E로 시작하고, 그 뒤에 F가 회 이상 붙으며, 그 다음으로 또 다른 슬럼프가 오거나 G가 올 것. 어떤 문자열이 '슬림프 + 슬럼프'의 형식으로 이루어져 있는지 검사하는 문제.. 슬림프인지 여부는 재귀호출과 슬라이싱으로 간단하게 구현 가능하다. 얼핏 보면 슬럼프인지 여부 또한 재...
-
. queue 모듈의 Queue 객체를 사용from queue import Queueq = Queue()q.put([, , ])q.get()if q.empty(): print("queue is empty.")queue 모듈의 Queue 객체는 put(), get(), empty() 등의 메서드를 사용할 수 있다.. 리스트를 통한 구현class QUEUE: def __init__(self): ...
-
def func(i): return i**obj = range()map = map(func, obj)- map() 함수는 함수와 iterable 객체를 인자로 하며, 인자로 받은 iterable 객체의 각 원소를 인자로 받은 함수에 대입해 그 함수값들을 (map 객체라는) iterable 객체에 담아 이를 리턴한다.- 인자로 넣는 함수에 형변환 함수들(int(), str() 등)을 전달하면, 어느 한 객...
-
'''. n x n 크기의 격자로 이루어진 배열이 개 있는데, 각 배열은 또는 로 이루어져 있으며 이 두 배열의 각 격자를 or 연산한 결과가 우리가 얻고자 하는 비밀지도. input으로는 각 행의 또는 을 진수로 보아 그 숫자를 진수로 기록한 값이 저장된 차원 배열 개가 들어올 때, 우리가 얻고자 하는 비밀지도를 리턴하는 문제.. 파이썬에서 루프를 사용하는 알고리즘은 간단한 경우에는 모두 lis...
-
. 개요- 정규표현식(regular expression)은 컴퓨터 과학에서 특정한 문자열 규칙을 갖는 문자열 집합을 표현하는 데 흔히 쓰이는 일종의 문자열 표현 방식으로, 여개의 메타문자를 사용한 간결한 문법으로 굉장히 다양하고 크기가 큰 문자열 집합을 표현할 수 있다.- 많은 프로그래밍 언어에서 정규표현식을 사용할 수 있으며, 프로그래밍 언어에서 문자열 검색, 문자열 치환 등을 수행할 때 정규표현식을 사용하...
-
. 개요- heapq 모듈의 heappush(), heappop() 함수를 사용하여 리스트를 힙처럼 사용할 수 있고, 이러한 특성을 이용하여 리스트로 우선순위 큐를 구현할 수 있다.- 구체적으로, heappush() 함수의 인자로 리스트와 그 리스트에 넣을 원소를 넣으면 그 리스트에 그 원소가 삽입되면서 그 결과로 그 리스트가 min-heap이 되고, heappop() 함수의 인자로 리스트를 넣으면 그 리스트...
-
. 컴파일import rep = re.compile('\w+')파이썬에서는 re라는 모듈을 import하여 정규표현식을 쓸 수 있다. 정규표현식을 쓸 땐 가장 먼저 사용할 정규표현식을 re 모듈의 compile() 함수에 대입하며 컴파일한 객체를 변수에 저장해 두어야 한다. 파이썬의 정규표현식에 관한 함수들은 원칙적으로 이 객체의 메서드를 호출하는 형태로 수행된다.* 컴파일 옵션- 컴파일 함수의 두 번째 인자...
-
. “문자열”[i]- 파이썬에서는 문자열 뒤에 직접 [i]를 붙여 그 문자열의 i번째 문자에 접근할 수 있다.. join()list = ["a", "b", "c", "d"]str = "".join(list)- 만약 문자들이 interable 객체의 각 원소에 나뉘어져 있을 때 이들을 하나로 합한 문자열을 구하고 싶다면 join() 함수의 인자로 해당 iterable 객체를 전달하면 된다.- join() 함수의...
-
. 개요- zip() 함수에 둘 이상의 iterable한 객체를 인자로 넣으면 i번째 행의 각 원소가 zip() 함수에 인자로 넣어진 객체들의 i번째 원소인 새로운 객체가 리턴된다. 이때 리턴되는 객체가 zip 객체로, 이 역시 iterable하므로 여러 방식으로 활용이 가능하다. 대표적으로, for 구문의 in 뒤에 객체로 넣는 경우가 있다.list = [, , , , ]tup = (, , , , )str ...
-
def isNumber(s): try: int(s) except: return "s에 문자가 포함됨." return "s는 숫자임."
-
tup = (, , , , )print(sorted(tup, reverse=True))- sorted() 함수에 인자로 iterable한 객체를 넣으면 그 객체의 내부값이 정렬된 리스트 객체가 리턴된다.- sorted() 함수의 두 번째 이후 인자로 reverse라는 이름에 True값을 지정해 리턴하면 내림차순 정렬이 된다. (이 인자는 생략할 수 있다.)def func(row): return row[]...
-
. 합집합set = set([, , ]) | set([, , ]). 교집합 연산을 이용하여 두 리스트에 모두 포함된 원소 개수 구하기list = [, , , , ]list = [, , , , ]num = len(set(list) & set(list)). 차집합 연산을 이용하여 에라토스테네스의 체 구현하기def getPrimeNumbers(n): p = set(range(, n+)) for i...
-
list = [, , , , ]print(min(, ))print(min(list))max, min 함수는 주어진 인자의 최댓값/최솟값을 리턴하는 함수로, iterable 객체를 인자로 받기도 하고 정수/실수 등의 자료형 변수 여러 개를 인자로 받기도 한다. 하나의 iterable 객체가 인자로 전달되면 그 객체 내 원소 중 최대/최솟값을 리턴하고, iterable 객체가 아닌 정수/실수 등의 자료형 변수 여...
-
num = ''print(int(num, ))int 형변환 때 문자열을 인자로 넣고, 두 번째 인자로 그 문자열의 진법을 넣으면 인자로 받은 문자열을 인자로 받은 진법으로 쓰인 것으로 보고 값을 계산하여 그 값을 리턴한다.
-
. 개요- 함수 중간중간에 계산된 결과값으로 이루어진 iterable한 객체를 만들고 싶을 때, yield 예약어를 사용하여 generator 객체를 만들어 사용할 수 있다.- 구체적으로 yield 예약어는 ‘return과 마찬가지로 함수 호출된 곳으로 값을 반환하되, 반환 후 다시 함수 내부 yield를 호출한 곳으로 돌아와 함수 내부 코드를 계속 수행한다’라는 개념으로 이해하면 정확하다. 예를 들어 아래와...
-
. whilewhile True: print(num % ) num //= if num == : break파이썬의 while문은 while 키워드, 조건식, 콜론 연산자로 이루어진다. 함수 선언과 마찬가지로 while문의 콜론 연산자 뒤에는 다른 구문을 쓸 수 없다.while num > : print(num % ) num //= if num == : breakelse: ...
-
. 개요C 유사 언어에서 둘 이상의 원소를 관리하는 가장 기본적인 변수 타입은 흔히 array라고 하는데, 파이썬에서는 이를 list라 한다. list는 내부적으로 구현이 array와 다소 다르기는 하지만 (파이썬에서 list로 선언된 변수의 원소들은 각 원소가 가리키는 데이터값의 주소와 다음 인덱스 원소가 있는 메모리 주소를 저장한다) 사용 방식은 C 유사 언어의 일반적인 배열과 거의 같다. (인덱스 번호로...
-
. 함수 선언a=b=def func(param, param): global a a= b= return param * param * bresult = func(, )print(a) # 가 출력된다.- 함수 내 전역변수 사용: 이 경우 굳이 함수 내에서 이를 캡쳐하겠다고 특별한 선언을 해야 하는 것은 아니며 그러한 선언 없이도 자유롭게 사용이 가능하다. 단, 이 경우 함수 내부에서 전역변수의...
-
. 변수 선언 및 값 대입num = str = '문자열'num, num = , num, num = num, numnum, num = [, ]- 파이썬에서는 C의 int, char나 자바스크립트의 var 같은 변수선언 예약어가 따로 없으며, 변수에 값을 대입하는 식을 처음 쓸 때가 곧 그 변수를 선언할 때와 같다. (자바스크립트의 var 같이 선언하지도 않은 변수를 사용할 수는 없다.)- 파이썬에는 쉼표(,)를...
-
from itertools import permutations, combinationspermutations(): 원소들을 배열하는 모든 순서 찾기for perm in permutations(nums, ): print(list(perm))permutations() 함수는 주어진 iterable 객체에서 주어진 개수 만큼의 원소를 순서를 고려하여 뽑는 모든 경우의 수를 리턴한다.이 함수는 예를 들어 주어진...
-
. 개요- position 속성은 그 엘리먼트를 노드를 어떤 위치에 배치해 화면에 보여줄지를 결정하는 속성이다. 기본 속성은 static(=문서 흐름에 맞게 배치)이지만, relative, absolute, fixed, sticky 같은 속성을 주어서 그 엘리먼트가 화면에 배치되는 위치를 바꿀 수 있다.- position의 속성을 특별히 지정하지 않는다면, 그 엘리먼트에 top, bottom, left, ri...
-
. 개요- display 속성은 그 엘리먼트가 주변 엘리먼트와의 관계에서 어떻게 배치될지를 결정하는 속성이다. 대표적으로 block 속성과 inline 속성이 있는데, inline 속성은 ‘앞 엘리먼트와 같은 줄에 공간이 있다면 무조건 그 줄에 그 엘리먼트를 배치할 것’을 뜻하며 block 속성은 ‘앞 엘리먼트와 같은 줄에 공간이 있더라도 무조건 줄바꿈을 해 새로운 줄에 그 엘리먼트를 배치할 것’을 뜻한다.-...
-
. 개요- 서로 다른 .js 파일들을 import, export 예약어를 사용하여 마치 하나의 소스파일을 작성한 것처럼 묶어 사용할 수 있다. 이처럼 모듈 단위로 개발한 수개의 .js 파일을 import, export 예약어로 서로 묶는 식으로 개발하면 <script> 태그로 .js 파일 수개를 로드하는 것에 비해 다음 이점을 얻을 수 있다.() <script> 태그로 .js 파일 수개를...
-
. 개요- 이진트리의 개념을 활용하여 문자열을 매우 효율적으로 무손실 압축할 수 있다. 허프만 코딩은 주어진 문자열의 정보를 손실 없이 효율적으로 압축하는 대표적인 암호화 기법의 하나로, 그 과정에서 이진트리를 사용한다.- 간단히 설명하면, 어떤 문자열이 주어진다 할 때, 허프만 코딩은 이를 구성하는 각 문자들을 빈도순으로 정렬한 후 빈도가 가장 적은 문자들부터 이진트리를 구성한다. (문자들은 오로지 이진트리...
-
. 개요- BST는 최악의 경우 삽입/삭제/탐색에 O(n)의 시간이 걸리는 단점이 있어 여러 균형 BST가 제시되었다. 예를 들어 AVL 트리의 경우 이를 구성하는 모든 노드의 좌우 서브트리 높이차가 이하가 되도록 해 이러한 BST의 단점을 극복했는데, AVL 트리의 경우 삽입/삭제 때마다 ‘회전 연산’을 수행해야 하고 이 회전 연산의 수행 횟수가 (선형시간은 아니지만) 꽤 있을 수 있다는 단점이 있다.- ...
-
. 개요- BST의 단점이 최악의 경우 트리의 모든 노드들이 선형적으로 길게 늘어서는 경우가 있을 수 있다는 것이므로, 이를 극복하기 위해 여러 아이디어가 제시되었다. 각 노드들이 갖는 양 서브트리의 높이차가 이하여야 한다는 AVL 트리나 루트에서 모든 외부노드까지 경로의 노드수가 최댓값이 커봐야 최솟값의 두 배여야 한다는 레드블랙 트리 또한 그 사례들이다.- B트리는 ‘한 노드가 갖는 키값의 수가 각각 달...
-
. 모듈 단위 개발의 이점- 프로젝트의 전체 소스코드를 하나의 파일에 몰아넣는 게 아니라 공통점이 있는 부분끼리 나누어 여러 개의 파일에 각각 따로 저장해 개발을 진행하는 것을 ‘모듈 단위로 개발한다’고 한다. 하나의 소스파일에 들어있는 코드끼리는 서로 공통점이 있으므로 코드의 가독성을 높일 수 있어 향후 기능별로 유지보수를 하는 데 유리하다.. 자바스크립트에서의 모듈 단위 개발- 자바스크립트에서도 기본적으로...
-
생성자를 포함한 클래스의 선언부는 흔히 다음과 같은 형태를 갖고 있다.class CLASS{private: int num, num;public: CLASS(n, n) { this->num = n; this->num = n; }}클래스의 생성자를 다음과 같이 콜론(:) 연산자를 이용하여 좀 더 간편한 형태로 쓸 수 있다.class CLASS{private...
-
. 연산자 오버로딩사용자가 새로 정의한 클래스형으로 선언한 변수의 경우, 이를 직접 기존 연산자를 사용하여 연산을 수행하는 것은 C++에 정의되어 있을 리 없다. 예를 들어, 다음 코드는 에러가 발생한다.class CLASS {public: int num=;}N;int main(){ std::cout << N + ; return ;}이런 경우를 위하여, C++에서는 클래스에 관련해서...
-
. C++의 람다식C++에서도 람다식을 쓰면 익명함수를 사용할 수 있다. 다음은 C++에서 람다식을 사용한 한 예이다.int main(){ int num = , num = , num = ; std::function<int(int, int)> func = [num, &num](int param, int param) ->int { num = ; re...
-
. 동기, 비동기, 블로킹, 논블로킹의 개념- 동기(synchronous)의 사전적 정의는 ‘동시에 일어난다’를 의미하며, 비동기(asynchronous)는 반대로 ‘동시에 일어나지 않는다’를 뜻한다. 컴퓨터 공학에서 ‘동시에 일어난다/일어나지 않는다’는 개념은 특정 시간 동안 또는 그 전후로 작업을 수행하는 주체가 둘 이상인 경우에 사용되며, 작업을 같은 시간에 시작해서 동시에 끝내는 경우 또는 한 주체가 ...
-
. 블로그에 올릴 게시물과 Jekyll을 실행하는 코드를 담을 새 레포지토리를 만든다.- 정적 웹사이트 생성 프로그램이란, 특정 형식의 문서 파일을 적당한 위치에 담은 후 그 프로그램을 실행시키면 그 문서 파일 내용을 일정한 형식에 맞춰 출력하는 웹사이트를 생성하고 이를 서비스하는 웹서버를 실행시키는 프로그램이다. GitHub는 정적 웹사이트 생성 프로그램을 지원하며, 블로그에 올릴 게시물과 함께 이를 실행하...
-
. 헤더 적용(#)- 문장 앞에 한 칸 띄고 #를 쓰면 그 문장이 헤더로 처리된다. - #의 개수로 헤더의 크기를 조절할 수 있며, 최대 개까지 지원된다. #가 많을수록 글씨가 작아진다. (환경에 따라 -개는 본문 글씨와 같거나 더 작은 경우도 있다. 개인적으로는 -개를 가장 많이 쓴다.)### . 대주제#### ) 소주제.... 목록 기호(., *, +, -)- 문장 앞의 숫자 + 마침표, 별표(*), 덧셈...
-
. 개요- 브라우저는 HTML 문서를 파싱할 때 문서의 맨 위에서부터 차례대로 태그를 하나씩 파싱한다. 이때, 파싱 과정에서 <script> 태그를 만나면 <script> 태그 안의 스크립트를 모두 실행하고 그 다음에 그 뒤에 있는 태그들을 파싱한다. (<script> 태그에서 src 링크가 지정돼있으면 해당 링크의 .js 파일을 다운받고 실행하고 그 다음에 그 뒤에 있는 태그...
-
. Git- 어떤 프로젝트를 개발했다고 할 때, 개발과정 및 사후관리 때 프로젝트를 구성하는 각 파일들의 변경점을 일일이 기록하고 이를 관리하는 것이 중요하다. Git은 이처럼 프로젝트의 변경점을 관리하는 프로그램(이를 version control system이라 한다)의 하나로, 오픈소스로 공개되어 현재 널리 사용되고 있다. - Git은 사용자의 PC에 설치해 사용할 수 있으며, 이를 통해 IDE 등을 통해...
-
. let자바스크립트는 var로 모든 변수를 선언할 수 있으나, var를 이용한 변수 선언의 경우 이것이 가진 여러 특징이 다음과 같이 여러 문제를 발생시킨다.) 중복선언var fruit = '사과';...var fruit = '배';var는 위와 같이 변수명이 같은 변수를 여러 번 중복으로 선언해도 에러가 발생하지 않는다. 이렇게 되면, 만약 앞에서 선언한 fruit에 중요한 정보가 담겨있을 때, 프로그래머...
-
. for inconst obj = { key: 'value', key: 'value', key: 'value' };for (let key in obj){ console.log(`속성명 ${key}의 속성값 ${obj[key]}`);}for in 반복문은 수개의 속성으로 이루어진 객체의 각 속성명을 매 루프마다 지정한 변수명(위 코드의 key)에 전달하는 반복문이다. 위 코드의 경우 다음과 같은 결과를 ...
-
. 개요- 하나의 HTML 문서는 <html></html>을 최상위 태그로 하여 안에 여러 태그 요소와 문자열로 구성된다. HTML 문서의 태그 요소들은 모두 각자의 부모 태그 안에 자식 태그로서 들어가 있어 마치 트리와 같은 구조를 갖는데, 브라우저는 HTML 문서를 파싱한 후 이들 태그 요소들을 각각 하나의 객체로 보는 트리를 만든 후 이 트리를 기준으로 페이지를 렌더링 한다. 이처럼...
-
. forEach()const array = ["사과", "배", "포도"];const obj = {key: "과일 이름"};const cb_func = function(elem, idx, arr){ console.log(`배열 [${arr}]의 ${idx}번 인덱스의 ${this.key}: ${elem}`);};array.forEach(cb_func, obj);- forEach()는 Array()형으로 ...
-
. 함수 선언식(function declaration)function func_name(parameter, parameter){ ...}한편, 다음과 같이 함수를 앞뒤로 ()로 감싸고 그 뒤에 ();를 덧붙이면 마치 그 지점에서 함수를 호출한 것과 같이 그 함수 내용이 실행된다.(function func_name(parameter, parameter){ ...})(argument, argument)...
-
. 인자를 생략한 함수 호출- 함수 선언 시 파라미터가 함께 정의돼 있다 하더라도, 함수 호출 시 반드시 인자를 넣어야만 함수가 실행되는 것은 아니다. 단, 함수 내에서 그 파라미터를 사용하는 경우에는 그 값이 undefined로 처리된다. 예를 들어, 아래 코드는 콘솔창에 undefined를 출력한다.function func_name(param){ console.log(param);}func_name(...
-
#include <iostream>#include <queue>#include <vector>using namespace std;struct comp{ bool operator()(vector<int> a, vector<int> b) { return a[] > b[]; }};priority_queue<vector<...
-
. 스레드 이진트리- 연결리스트로 구현된 이진트리의 경우, 자식이 개 이하인 노드는 자식을 가리키는 메모리 주솟값이 하나 이상 null을 가리키게 된다. 예를 들어 노드수 n개인 이진트리가 있다 하면 여기서 자식을 가리키는 메모리 주솟값이 n개가 할당되게 되는데, 그 중 절반이 null을 가리키게 된다. 스레드 이진트리는 이처럼 null을 가리켜야 할 메모리 주솟값에 그 노드의 중위선행자/후속자(그 트리를 중...
-
. 그래프 관련 용어들 그래프: 개 이상의 노드와 각 노드 사이를 잇는 개 이상의 간선으로 구성돼있는 노드 사이 연결 관계 연결요소: 어떤 그래프의 부분그래프로서 이를 구성하는 모든 노드가 서로 연결(=노드와 노드 사이에 개 이상의 간선으로 이루어진 경로가 존재)되어 있는 부분그래프. 하나의 그래프는 서로 이어지지 않은 수개의 연결요소로 이루어진다. 단절점: 그래프의 어떤 ...
-
. 개요- AOE 네트워크는 그래프의 일종으로, 간선에 가중치가 있는 방향그래프이다. 간선은 작업, 간선의 가중치는 작업 수행 시간, 간선의 방향은 사건의 선후관계를 나타내며, 간선의 끝부분에 있는 노드는 그 작업의 수행의 결과로서 도달하게 되는 사건을 의미한다. 어떤 사건도 그 선행 작업이 종료되기 전에는 일어날 수 없다. - 수개의 작업을 동시에 수행할 수 있지만, 모든 작업을 다 수행해 최종 사건에 도달...
-
. \(O\) (big-O) 표기법) 정의어떤 알고리즘의 시간복잡도를 입력크기 \(n\) 에 관한 다항식 \( f(n) \) 으로 나타냈을 때,어떤 양수 \(n_\) 보다 큰 모든 \(n\) 에 대하여 \(f(n) \le k \cdot g(n) \) 을 만족하는 양수 \(k\) 와 \(n_\) 가 존재한다면 \(f(n) = O( g(n) )\) 으로 정의된다.) 이해- 알고리즘의 시간복잡도를 구체적으로 계산해...
-
. \(P = NP\) ?) 결정문제(decision problem)- 출력이 단순히 yes 또는 no인 문제를 결정문제라 한다. 최적해를 구하는 모든 문제는 그에 상응하는 결정문제가 있다. 예를 들어 TSP 문제는 ‘주어진 경로보다 더 짧은 여행경로가 있는가?’ 라는 결정문제로 대응된다.- 결정문제 중, 다차시간 알고리즘으로 풀 수 있는 모든 결정문제 집합을 흔히 P라 칭한다.) 비결정적 알고리즘(nonde...
-
. 개요- Knuth - Morris - Pratt 알고리즘의 약자로, 찾고자 하는 단어를 긴 문자열 내에서 검색하는 문자열 검색 알고리즘의 하나다. 알고리즘의 발견자들인 James Morris, Donald Knuth, Vaughan Pratt의 이름을 따서 지어진 이름이다.- 이와 같은 문자열 검색 알고리즘을 완전탐색_(긴 문자열 인덱스 하나하나를 시작점으로 해서, 그 지점에서부터 검색 단어가 문자열과 일...
-
가장 기초적인 비트마스크 DP 문제./*. 노드가 N개인 양방향 그래프에서 어느 한 노드를 출발해 모든 노드를 방문하고 시작점으로 돌아오는 순회 경로를 만든다고 할 때(단, 한번 지난 노드는 다시 지날 수 없다), 지나온 간선 가중치의 합이 최소인 경로의 가중치의 합을 구하는 문제. . dp[mask][i]: mask라는 경로를 거쳐 i번 노드에 도착했다 할 때, 거...
-
N x N 격자판에서의 간단한 DFS 문제./*. N x N 격자판에 체스의 퀸을 N개 배치하되 각 퀸이 서로 공격할 수 없는 위치에만 퀸을 배치할 경우, 가능한 배치의 경우의 수를 구하는 문제. . 다음 알고리즘으로 코드를 구현했다. () i번째 행에서 퀸을 놓기 합당한 열을 탐색한다. - i-번째 행까지 총 i-개의 퀸이 배치되어 있으므로, i번째 행의 j열에 퀸을 배치한다 할 때 ...
-
우선순위큐를 이용한 그리디 문제./*. 작업의 수행이 요청된 시간 그리고 그 작업을 수행하는 데 소요되는 시간이 서로 다르거나 같은 수개의 작업이 있고, 이들 작업은 한 번에 하나씩만 처리할 수 있다. 어느 한 작업을 처리하는 중일 때 다른 작업이 요청된 시간이 지나면, 그 작업은 시작되지 않고 대기된다. 모든 작업을 다 수행한다 할 때, 요청된 시간부터 종료된 시간까지의 시간의 평균을 최소...
-
적절히 객체화를 잘 하면 비교적 간결하게 구현할 수 있는 구현문제./*. 과 로 채워진 차원 격자판 두 개가 입력으로 들어오며, 각각은 다음 의미를 갖는다. game_board: 빈칸()과 채워진 칸()으로 이루어진 격자판. table: table 배열의 은 블록을 의미하고 은 빈칸을 의미한다. 은 상하좌우로 둘 이상 인접할 수 있으며, 이 경우 이 인접한 모양대로 table에 블록이 ...
-
Prim’s algorithm을 통해 간단하게 해결할 수 있는 MST 문제./*. N x N 크기의 격자칸에 격자칸이 갖는 '높이'가 주어지고 height라는 정수값이 주어질 때, 한 격자칸에서 다른 격자칸으로 이동할 때 높이차가 height 이하라면 이동하며 발생하는 cost가 없으나 height를 초과한다면 그 초과한 값만큼 cost가 발생한다. 이때, 발생하는 cost 합이 최소가 되도록...
-
간단한 차원 DP문제. /*. strs라는 문자열 배열과 t라는 문자열이 주어질 때, strs 문자열 배열의 원소들로 t라는 문자열을 만드는 경우의 수가 얼마나 되는지를 구하는 문제. (단, strs 배열의 원소의 길이는 최대 .) . dp[i] : strs 문자열 배열을 이용해 t 문자열의 i번 인덱스까지 만드는 경우의 수 로 dp 배열을 정의한 후, 다음과 같은 점화식을 통해 DP 문...
전체 글 (204)