728x90

Programming Language 68

C] memset, memcmp

알고리즘 문제를 풀다보면, 새로운 값을 입력받을 때마다,임시적으로 사용했던 데이터들을 모두 갈아 엎고,메모리에 저장된 값을 특정한 값으로 일괄초기화를 해야 하는 경우가 생기는데,그럴 때마다 골치가 아팠는데 이럴 때 사용하기 좋은 메모리 조작 함수가 있다. memset, memcmp, memcpy, memmove는 string.h에 정의되어 있으며,memory.h에도 정의되어 있는데 이 때 memmove는 정의되어 있지 않으니,고민할 것 없이 string.h를 포함시키면 된다. 1. memset 함수 원형 1void * memset(void * ptr, int value, size_t num);cs 사용법memset(메모리 블럭 첫번째 주소, 문자(문자 하나), 메모리 블럭 크기(byte)) 활용자료형이 ..

C++] 다중상속(Multiple Inheritance)

Multiple Inheritance;다중상속 하나의 파생 클래스가 여러 클래스를 동시에 상속 받는 경우를 말하며,그 효용성에 비해 반대급부가 커서 사용하지 않는 편이며,C#, Java에서는 지원하지 않음. 여러 클래스를 상속받아 재사용과 효율을 높일 수 있겠지만,치명적인 문제를 가지고 있음 12345678910111213141516171819202122232425262728293031#include using namespace std;class BaseIO{public: int mode;};class In : public BaseIO{public: int readPos;};class Out : public BaseIO{public: int writePos;};class InOut : public In,..

C++] RTTI(Run-Time Type Information)

RTTI(Run-Time Type Information)실행 중 객체의 타입과 관련된 정보를 알아내는 기법실행 중 포인터가 가리키는 객체의 실제 타입을 알아야 하는 경우,클래스가 상속 관계에 있을 때 포인터가 가리키는 객체가 파생클래스의 객체인지기본클래스의 객체인지 판단해야 하는 경우, RTTI 기법을 이용해 알아낼 수 있다.RTTI 활용을 위해서는 typeinfo 헤더를 포함시켜야 함. type_info 클래스는 typeid 연산자에 의해 반환되는 정보로,타입 이름과 같은 타입에 관한 정보를 가진 클래스임 123456789class type_info{public: bool operator==(const type_info& rhs); bool operator!=(const type_info& rhs); ..

C,C++] cin/cout, scanf/printf

알고리즘 문제를 풀다 보면, Time Limit(시간 제한)에 대해서 신경 쓰지 않을 수가 없다.제한된 메모리에서 최대한 빠른 시간 내에 정확한 답을 찾는 것이 좋은 알고리즘이고,그렇지 못한 알고리즘은 TLE나 시간 초과 등을 이유로 답을 처리해주지 않는다. 입출력이 수천 번에 머무르면 시간 초과가 발생하면거의 대부분 알고리즘에 문제가 있지만,입출력이 수십만 개, 수백만 번에 이르면 이야기가 좀 다르다. 한 예를 들어서 설명을 해볼까 한다. https://www.acmicpc.net/problem/11004 백준 사이트의 11004번 : K번째 수라는 문제다.N개의 숫자들을 입력 받고 오름차순 정렬을 했을 때,K번째의 수를 출력하는 것이다. 문제는 되게 간단하다.입력 값이 5백만개에 이르며 숫자 중복도 ..

C++] vector를 구조체 내 변수 기준으로 정렬하기

C++로 알고리즘 문제를 풀거나 이런 저런 이유로 코딩을 하다 보면 vector를 사용하게 되고 이 vector 내에 들어가는 값들을 정렬하기 위해서 직접 정렬을 구현해주는 방법도 있지만 좀 더 최적화되어 빠른 속도로 정렬을 수행해주는 sort함수를 사용하게 된다. 요소의 상대적 위치가 바뀌지 않는 걸 원한다면, stable_sort를 사용하면 된다. 통상적으로 자료형이 하나(예를 들어 int 하나)만 들어가는 vector라면, 시작점과 끝만 정해주면 알아서 오름차순 정렬을 수행해버리기 때문에 문제가 되지 않지만, vector 배열에 들어가는 정보가 여러 가지 자료형이 섞여 있는 구조체이고 그 구조체 안의 변수를 기준으로 정렬을 수행해야 한다면, 갑자기 머리가 아파온다. 대부분 레퍼런스를 참고하지 않거나..

C++] Vector를 이용한 이중 배열

C++] Vector를 이용한 이중 배열 동적 할당에 대해서 익숙해지면배열을 정적으로 할당하는 경우가 줄어들게 되고거의 대부분 동적으로 할당하게 된다.그렇지 않은 사람들도 있겠지만,나는 변수 사이즈에 따라 배열 크기가 바뀌는 경우 반드시 동적할당을 통해서배열의 크기를 결정 짓는다. 그러다가 STL의 vector라는 걸 알게 되면,동적 할당도 잘 사용하지 않게 된다.구조체가 필요하고 안에 들어가는 변수 관리가 까다로운 경우가 아니면,거의 대부분의 경우 vector를 사용하게 된다.물론, vector에 임의의 구조체를 넣지 못하는 건 아니고그건 순전히 사용하는 나의 숙련도 문제에서 기인한 것이라고 생각된다. Topcoder나 비정기적 혹은 정기적으로 개최되는 코딩 대회에 참가하거나,그곳에서 나온 문제들을 풀..

Python] 문자열 정의

###Python 문자열 정의 - 문자열 내에 '를 사용할 경우,""를 이용해 문자열을 정의하면 이용 가능\'을 이용하면 ''를 이용해 문자열을 정의 가능str = 'Don\t move "RUN"' - \는 다음 라인이 현재 라인의 뒤에 이어짐을 나타냄long_str = "This is a rather long string \containing back slash and new line." - 여러 줄의 문자열 정의multiline = """ While the rest of the world has been catching on tothe Perl scripting language, the Linux community,long since past ...has been catching on to a """..

Python] 연산자

###연산자 ##산술연산자 - 단항연산자, 지수연산자, (곱하기, 나누기, 나머지, 몫), (더하기, 빼기)의 우선순위- 곱하기, 나누기, 나머지, 몫 : *, /, %, //로 결합순서가 좌에서 우- 지수 연산자 : **(2**3=8)로 결합순서가 우에서 좌- 더하기, 빼기 : +, -로 결합순서가 좌에서 우- print divmod(a,b) = (a/b, a%b) ##관계연산자 - 객체가 지는 값의 크기를 비교하여 True, False 반환a==b, a!=b, a>b, a실제 코드 개발 시 연산자 우선순위에 많은 의존 없이 괄호를 적절히 사용해 코드의 가독성을 높이는 것이 좋다.

API] SetWindowsHookExA 함수

SetWindowsHookExA function 123456HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId);cs user32.dll에 있는 해당 함수를 통해 훅을 설정할 수 있음.대표적인 함수로, MSDN에서 해당 함수의 구조와 사용법에 대해서 알 수 있음. 첫번째 인자, 훅 타입으로 어떤 종류의 메세지를 후킹할 것인지 선택하는 것두번째 인자, Hook Procedure세번째 인자, 후킹할 스레드가 속해 있는 DLL의 핸들네번째 인자, 후킹할 스레드 아이디 첫번째 인자에 들어갈 훅 타입은 구글링으로 체크 가능두번째 인자로 사용할 훅 프로시저, 파이썬의 경..

728x90