728x90

전체 글 637

파도 파도 컨텐츠가 끝이 없는 게임, 대항해시대 온라인 - 2

필자가 처음 게임을 접했을 당시는 부분유료화로 유저가 다수 유입된 상태였다. 당시엔 그래도 게임 내 유저들이 많은 편이어서 두런두런 이야기하면서스트레스 받지 않는 Non-PK 서버인 에이레네에 정착해 플레이했지만,요즘은 농촌도 이런 농촌이 있나 싶을 정도로 사람이 적어, 심히 서버 이전을 고려하고 있지만, 어딜 가든 그저 혼자 컨텐츠를 즐기는 게임이 되어버린작금의 현실에서 서버 이전이 무슨 의미가 있나 싶은 생각이 든다. 게임 자체는 잘 만들어진 게임이라고 생각한다.랭작이라는 걸 즐기면서 내가 지금 어디까지 왔나 자아성찰(?)을 하는 재미도 있고,다른 유저들의 실험이나 체계화된 정보를 보면서 이를 응용하는 재미도 쏠쏠하다. 뭔가 나만의 해상무역팀을 만드는 것 같아서 재미는 있지만 사람이 많았던 예전이 그..

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)로 계산량도 적어 매우 효율적으로 보인다.그러나, 이는 모든 지점을 통과할 수 있을 때나 가능하다는 제한적인 케이스..

DataStructure,Algorithm] 힙정렬(HeapSort)

입력 받은 배열을 O(n)으로 히프 트리 구조로 생성할 수 있지만, 여기서는 일단 O(nlogn)으로 진행되는 히프트리 구성을 실시했다. (이 부분에 대해서는 차후 포스팅할 생각) 최대 히프트리를 구현했고, 최대 히프트리를 바탕으로 오름차순 정렬을 하는 코드다. 내림차순 정렬을 보고 싶다면, list 배열에 넣는 인덱스 순서만 바꿔주면 되고 공부 삼아 최소 히프트리를 구현하는 것도 나쁘지 않을 것이다. 숙련자가 보기에는 이 소스는 잘 짜여진 소스는 아니라는 것을 말해주고 싶다. 처음 자료구조를 배우던 시절 구조에 대해서만 깨우치고 만든 소스라서, 불필요한 메모리 할당도 있고 히프 트리 구성에서 시간 복잡도 손실을 보기는 하지만, 히프트리를 바탕으로 힙정렬(혹은 히프정렬)을 구현하는 것까지는 문제되지 않아..

넥슨] 넥슨 로그인 기록 확인하기

넥슨 플레이를 스마트폰에 설치해 계정을 연동해 둔 상태면 초기 설정으로 로그인 시 알림이 오게 된다.여느때처럼 쉬고 있는데 갑자기 접속하지도 않은 넥슨에 접속했다고 하고,심지어는 어플에서 확인했을 때 게임 이용 기록까지 남아 있으면게임에 시간과 돈을 투자한 유저라면 등골이 오싹해지게 된다.(아직도 기억에 남는다 맨손으로 서 있던 내 캐릭터가...)유독 넥슨의 게임들이 해킹에 많이 노출되는 것 같은데 아무래도 보편적으로 널리 하는 게임들을 가지고 있고,그런 만큼 현금 거래 시장이 활성화되어 있어 많은 악질들의 타겟이 되기 마련이기 때문에넥슨 측의 주의도 필요하지만, 일차적으로는 사용자의 주의가 필요하다. 이 글을 쓰는 필자도 평소처럼 쉬고 있는데,새벽 6시에 갑자기 로그인했다는 기록이 떠서 일단은 원격에서..

기타/기타 2017.07.08

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파일 분리를 논하고 있는 본인조차도 학부시절 자료구조 강의를 들을 때가 되어서(아마 연결리스트를 응용하는 함수였던 걸로 기억한다.) 자주 접한 편이었다. 그렇게 강제하거나 따로 배운 건 아니고, 손 하나 대지도 않을 코드를 복사 붙여넣기 해서 괜히 스크롤을 내려야 하는 번거로움에 대한 반항심과 다른 학생들..

728x90