목록etc (29)
Coding Memo
Windows 어플리케이션 개발 시, 하나의 어플리케이션의 실행만 허용해야할 때가 있을 것이다. 예를 들어, 게임에서 클라이언트 다중 실행을 막거나,서버에서 같은 프로그램이 동시에 실행되는 것을 방지하는 등이 있겠다. Windows에서 동일한 응용 프로그램을 여러 번 실행하는 것을 방지하기 위한 방법에는 어떤 것들이 있는지 알아보자. 1. Mutex 이용 멀티 스레드 환경에서 (하나의 응용 프로그램 내에서) 동기화를 위해 mutex를 활용하듯이, 커널에서도 mutex를 사용할 수 있다. 이 mutex는 커널 오브젝트 (kernel object)로, 하나의 프로세스만 해당 자원에 접근 할 수 있도록 할 수 있다.자세한 내용은 다음 글에!https://minttea25.tistory.com/168 Wind..
프로그램 내의 스레드 간 공유 자원에 대한 접근을 제한하는 것처럼 프로세스에서도 어떤 자원에 대해, 같은 응용 프로그램이 동시에 변경을 하거나, 작업을 하면 안되는 경우가 있다. 어떻게 방지 할 수 있을까? 여러 방법 중 하나로, Windows에서 제공하는 mutex를 활용하는 방법이 있다.HANDLE CreateMutexW( [in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes, [in] BOOL bInitialOwner, [in, optional] LPCWSTR lpName); HANDLE OpenMutexW( [in] DWORD dwDesiredAccess, [in] B..
Fisher-Yates Shuffle (피셔 예이스 셔플) 알고리즘은 랜덤 값을 이용해, 배열을 uniform하게 섞을 수 있는 알고리즘이다. 한번 순환 (1 iterator)로 셔플을 완성할 수 있다. 매우 간단하다. 랜덤하게 숫자 하나를 뽑고 그 값을 인덱스로 치환한다음 그 값과 현재 값을 swap한다.// Fisher-Yates Shuffle Algorithmvoid Shuffle(std::vector& arr){ int n = arr.size(); for (int i = n - 1; i > 0; i--) { int j = rand() % (i + 1); swap(arr[i], arr[j]); }} 하나 주의할 점은 랜덤 값을 얻는 함수로 rand()를 사용했기 때문에 시드를 설정 해줘야 한..
리눅스 파일 구분 리눅스에서 파일은 크게 4가지로 구분한다. 하드웨어 장치들도 모두 파일들로 관리되는 것에 주목하자. 1. 일반 파일 (Regular Files) 일반적인 파일들을 저장하는데 사용된다. 텍스트, 이미지, 바이너리 파일 등이 이에 포함된다. 2. 디렉터리 (Directories) Windows의 폴더와 같은 개념이라고 보면 된다. 파일들과 디렉터리를 그룹화하고 구조화한다. 또한 파일의 계층 구조를 나타낸다. 3. 심볼릭 링크 (Symbolic Links) Windows의 바로가기와 같은 개념이다. 특정 파일이나 디렉터리를 간접적으로 가리키는 파일이다. 즉, 가리키는 원본 파일과 가리키는 파일 (Symbolic links)가 따로 존재한다. 4. 장치 파일 (Device Files) 시스템의..
서버와 클라이언트 사이에 패킷을 암호화 하여 전송을 하려고 계획했다. 생각한 2가지 방법은 일단 모두 대칭키 방식이다. 첫 번째는 단순히 바이트 배열에 대한 비트연산을 활용하는 방법, 두 번째는 AES 암호화를 사용하는 방법. 간단한 비트 연산 xor 연산을 이용하여 암호화 및 복호화하는 방법이다. public byte[] Encrypt(byte[] data, byte[] key) { byte[] encrypted = new byte[data.Length]; for (int i = 0; i < data.Length; i++) { encrypted[i] = (byte)(data[i] ^ key[i % key.Length]); } return encrypted; } public byte[] Decrypt(b..
보호되어 있는 글입니다.
Visual Studio에서 빌드 전/후로 이벤트 명령줄을 추가해 줄 수 있다. 빌드 전/후에 이벤트를 추가함으로써 프로젝트와 관련된 외부 파일 컨트롤이나 파일 추가 및 삭제, 이동 등의 명령을 빌드시에 한번에 실행 시킬 수 있다. 매번 해야하는 반복되는 작업을 단지 프로젝트 빌드 한번으로 한꺼번에 해줄 수 있다는 것이다. 1. Visual Studio에서 솔루션 탐색기에서 솔루션을 선택하고 우클릭->속성(Properties)를 클릭한다. 2. 좌측 옵션에서 Build Events를 클릭 3. Command Line에서 edit을 선택해 명령줄을 추가 할 수 있다. 여기서 말하는 명령 줄은 흔히 cmd에서 입력하는 명령과 같다고 생각하면 된다. 총 3가지 경우에 대해 추가해 줄 수 있다. 빌드 전 이벤트..
최대 연속 부분 구간 합 문제로 어떤 하나의 문제를 다양한 방법으로도 풀 수 있는 경우가 있다는 것을 확인하고 시간복잡도가 어떻게 차이가 나는지 확인해보자. 참고: 이 내용은 `프로그래밍 대회에서 배우는 알고리즘 문제해결전략 - 구종만 지음`에서 나온 내용을 일부 가져왔다. 문제 정수로 이루어진 1차원 배열에서 연속된 부분 구간 중 그 합이 최대인 구간의 합을 구하는 문제이다. 예를 들어 다음과 같인 배열이 있을 때, 연속된 부분 구간 중 최대 합은 12 이다. [ -5, 10, -5, 7, 0, -3, 1, -5, -2, 5 ] => [ 10 , -5, 7 ] => 10 + (-5) + 7 = 12 풀이 1 : 모든 길이에 대해 모든 합 계산하기 첫번째 인덱스 부터 시작해서 길이가 1, 2, 3, ....