728x90

프로그래밍 410

HTML] <input>태그의 type 속성 유형

hidden : 사용자에게 보이지 않으나, 서버로 넘겨지는 값 가지는 필드- 예를 들어 회원가입 폼에서 사용자가 입력하지 않아도 되는 정보를 서버로 넘길 때 사용하는 폼- name 속성으로 필드 이름 지정, value 속성으로 서버로 넘김 text : 텍스트 상자, 한 줄 입력- ID, 이름, 주소 등 텍스트 입력 시 주로 사용- name(필드 이름), size(필드 길이), value(필드 부분에 표시될 내용), maxlength(최대 문자 개수)이름 search : 검색 상자 삽입- HTML5에서 추가된 별도 속성 url : URL 입력 필드 삽입- HTML5에서 요소가 분화함. password : password 입력 필드 삽입- value 속성이 없는 것을 제외하고 일반 텍스트 필드와 동일비밀번호

Network] 시그널 종류

시그널발생 조건SIGINT인터럽트키(Ctrl+c)를 입력했을 때 발생SIGKILL강제 종료 시그널, 프로세스에서 이 시그널을 무시하거나 블록 불가SIGIO비동기 입출력이 발생했을 때 전달SIGPIPE파이프 통신에서 수신 프로세스가 종료했을 때, 송신 프로세스가 파이프에 write하면 발생SIGCHLD프로세스가 종료되거나 취소될 때 부모 프로세스에 전달SIGPWR전원의 중단 및 재시작 시, init 프로세스로 전달SIGTSTP사용자가 키보드에서 중지키(Ctrl+z)를 입력했을 때 발생SIGSYS잘못된 시스템 호출 시 발생SIGURG대역 외 데이터를 수신 시 발생SIGHUP터미널과 연결이 끊어졌을 때 세션 리더에게 발송SIGUSR1사용자가 임의의 목적으로 사용 가능SIGUSR2SIGQUIT종료키(Ctrl+/..

Algorithm] 경로 탐색 - 2

이전 포스팅에서도 말했다시피, 일반적인 재귀 방법을 사용하는 건 시간이 오래 걸린다는 단점을 가지고 있다. 메모화재귀는 동적계획법을 재귀적으로 사용하는 것으로 동적계획법의 일종으로한 번 계산이 진행된 것은 추가로 진행하지 않는 것을 목표로 하기 때문에깊이 우선 탐색을 응용해 (1,1)에 하위에서 생성된 계산값을 미리 작성해두어만일 다시 접근이 이뤄지면 그 값을 반환시키는 것을 말한다. 깊이 우선 탐색을 통해서 일반적인 재귀 방법으로 접근했을 때 중복되는 작업들을 많이 걸러낼 수 있어서제한 시간 초과라는 문제를 극복할 수 있다. const int h = 5, w = 4; int Memo_recursion[h + 1][w + 1]; int dfs(int nowh, int noww) { if (nowh > h..

Android] 블루투스 프로토콜 UUID

블루투스 모듈이랑 안드로이드 기기 간 통신을 해야하는데,사용하는 프로토콜에 맞는 UUID를 사용해야 한다.모르고 했다간 괜한 부분에서 삽질하게 된다. BASE UUID = '{00000000-0000-1000-8000-00805F9B34FB}'; SDP_PROTOCOL_UUID = '{00000001-0000-1000-8000-00805F9B34FB}';UDP_PROTOCOL_UUID = '{00000002-0000-1000-8000-00805F9B34FB}';RFCOMM_PROTOCOL_UUID = '{00000003-0000-1000-8000-00805F9B34FB}';TCP_PROTOCOL_UUID = '{00000004-0000-1000-8000-00805F9B34FB}';TCSBIN_PROTOC..

Algorithm] 경로 탐색 - 1

B A 아마 고교시절 순열조합 부분에서 자주 접하는 문제 중 하나로,A 지점에서 B 지점으로 갈 때 최단거리의 경우의 수가 얼마나 되는지 구하는 것이 목표인 문제다. 깊이우선탐색을 사용할 때, 모든 기점마다 경로를 선택해야 하고 이 경우 30번정도 그런 과정이 필요하다.따라서 Big O는 O(2^(w+h))가 되어 2^30인데 10억이 넘어가는 수치가 된다.연산 시간이 오래 걸려 썩 좋은 방법이 아니다. 우리는 이 문제를 고교시절 기계적으로 푸는 방법을 터득한 바 있다.바로 이항정리에 근거한 조합을 이용하는 방법이고9C4=126이라는 정답에 빠르게 근접할 수 있다.Big O 또한 O(w+h)로 계산량도 적어 매우 효율적으로 보인다.그러나, 이는 모든 지점을 통과할 수 있을 때나 가능하다는 제한적인 케이스..

C,C++] 조건 컴파일 문

헤더 파일을 작성하고 이용할 때 주의해야하는 부분이 있다. 클래스나 함수가 선언된 헤더 파일을 여러 차례 include 하면, 중복 선언으로 인해서 컴파일 오류가 발생할 수 있다는 점이다. 헤더파일을 이용하는 main.cpp에서 A라는 헤더 파일을 여러 차례 include하는 경우는 극히 드물겠지만, 문제는 다른 헤더 파일 B와 C에서 이미 헤더 파일 A를 내부적으로 include한 경우 일일이 헤더파일을 확인하는 방법 외에는 중복 선언을 방지할 방법이 없다. 제대로 숙지하지 못한 상태에서, A, B, C를 연달아 include하는 경우, 결국 헤더 파일 A의 중복 선언이 두 차례 발생해 컴파일 오류를 발생시킬 것이다. 이 문제를 해결해주는 것이 바로 조건 컴파일 문이라는 것이다. 헤더 파일을 작성하는 ..

C, C++] 헤더파일과, CPP파일로 소스 코드 분리

대학교 학부과정에서 C, C++을 배우는 상황에서는 소스코드를 헤더파일과 CPP(혹은 C, 여기서는 CPP파일로 통칭하겠다.)파일로 분할해서 활용하는 일이 거의 없다. 컴퓨터 사고를 키우는 것과 프로그래밍의 기초에 집중하는 부분도 고려하기 때문인 것도 있지만, 기본적으로 코드를 분할해서 관리할 정도로 코드가 길거나, 재사용할 일이 없기 때문인 것이 가장 크다고 생각한다. 이 글을 쓰면서 헤더파일과 CPP파일 분리를 논하고 있는 본인조차도 학부시절 자료구조 강의를 들을 때가 되어서(아마 연결리스트를 응용하는 함수였던 걸로 기억한다.) 자주 접한 편이었다. 그렇게 강제하거나 따로 배운 건 아니고, 손 하나 대지도 않을 코드를 복사 붙여넣기 해서 괜히 스크롤을 내려야 하는 번거로움에 대한 반항심과 다른 학생들..

C++] 가상함수 호출과 오버라이딩

#include using namespace std; class Base { public: virtual void f() { cout Base의 f()에 대한 모든 호출이 실행 시간 중에는 Derived의 f() 함수로 동적 바인딩. 가상함수(Virtual Function) virtual 키워드로 선언된 경우, 컴파일러에게 자신에 대한 호출 바인딩을 실행 시간까지 미루도록 지시 어느 클래스에서든 선언 가능함. 함수 오버라이딩(Function Overriding, 혹은 중복 ) 파생 클래스에서 기본 클래스의 가상 함수와 완전히 동일한 원형의 함수를 재정의 C++의 다형성 중 하나 기본 클래스의 포인터, 파생 클래스의 포인터를 이용하더라도 가상함수를 호출하면 파생 클래스에 오버라이딩된 함수가 항상 실행됨

C++] 일반화와 템플릿

template 키워드를 사용하면 중복함수들을 일반화시킨 특별한 함수 생성이 가능하다.이를 템플릿함수(template function) 혹은 제네릭함수(generic function)라고 한다.C++에서의 템플릿은 함수와 클래스 코드를 일반화시키는 도구 템플릿 함수나 클래스를 작성할 경우,template이란 키워드를 사용하여 로 제네릭 타입 T를 선언한다. 중복함수를 템플릿화하는 과정의 역과정을 구체화라 하며,컴파일러는 함수의 호출문을 컴파일하는 경우 구체화를 통해구체적인 함수의 소스코드를 생성해내며, 이를 구체화된 함수라 한다. #include using namespace std; class Circle { int radius; public: Circle(int radius = 1) { this->ra..

728x90