기술 개념 정리 확실히
왜 쓰는지
장점은 뭔지 단점은 뭔지
다른 기술과 비교하여 차이점

동기화 방법
크리티컬세션
뮤텍스

Tcp udp 제대로 확실하게

게임 서버 프로그래밍 교과서 다시 읽기

요즘 트렌드 기술들 기본이라도 알기
메타버스 등등


모작하기

stl 구동원리, 장단점, 차이

아나그램 코딩, 시간복잡도

mysql 코딩 방법

 

스레드를 추가하여 사용할 때 컨테스트 스위칭이 발생하여

자원 낭비와 시간 소모가 크다

그렇다면 컨테스트 스위칭의 비용이 0이라고 하면 

스레드를 계속 추가하면 성능이 올라가는지?

 

SRPG == simulation +  role-playing game 합성어

여기서 simulation은 전략 시뮬레이션을 뜻한다.

 

- 격자로 된 타일 위에서 캐릭터들을 전략적으로 움직여 승리하는 게임들이 SRPG에 속한다.

- 캐릭터의 움직임에 관여

- 전투에는 플레이어가 관여하지 못하는 것이 주요 특징

- 턴제로 진행

- 전술 시스템 + RPG 캐릭터 육성 시스템

 

장점

- 기물의 배치를 다채롭게 할수 있다.

- 리소스, 핑, 지연시간문제가 경감된다.

단점

- 변수창출이 안된다. 실력에 의존한 게임 그래서 확률적 요소를 변수로 둔다

낮은 난이도 일수록 플레이어에게 유리한 확률 보정을 준다.

 

대표적으로 체스나 장기 같은 보드게임이 있고 

국내에서는 파랜드 택틱스, 영걸전 시리즈, 랑그릿사 시리즈가 있다.

 

요약

SRPG는 성장 & 전략을 기반으로 타일을 사용하여 턴제 자동 전투 확률 게임

(요즘에는 턴제 대신 스피드 턴을 사용한다)

'프로그래밍 공부 > 궁금한 정보들' 카테고리의 다른 글

c++ map 과 hash_map 의 차이  (0) 2022.03.01
용어 정리  (0) 2022.02.17
if(!) if문 안에 !의 의미  (0) 2022.02.14
C++ 구조체와 클래스 차이  (0) 2022.02.04
문자열 _T 매크로, C++ 리터럴이란  (0) 2018.01.04

map 은 정렬된 상태로 자료를 저장할 때 사용하고

hash_map 은 정렬이 필요하지않고 많은 자료를 저장하고 빠른 검색을 원할 때 사용한다.

 

map

- 자료를 정렬하여 저장

- 데이터를 순회 할때 넣은 순서가 아닌 정렬된 순서로 순회

- 이진탐색트리 탐색 속도 O(log n) 보장

hash_map

- 자료를 정렬하지 않고 저장

- 배열로 접근 탐색 속도 O(1) 이상

- 많은 자료를 저장하고 있어도 검색이 빠르다.

- 적은 자료를 저장하고 있을 때는 메모리 낭비와 검색 시 오버헤드가 발생한다.

 

컨테이너 추가 삭제

list, vector, deque > hash_map 보다 빠르다

적은 요소를 저장하고 검색

list, vector > hash_map 훨씬 빠르다

 

hash_map은 표준 STL은 아니다.

- STL의 공식 컨테이너에 속하지 않는다.

- 해쉬키가 충돌이 나게 되면 계속 충돌이 발생하여 탐색 성능의 안정성을 보장 못한다.

- c++에서 지원을 하긴 한다.

 

 

 

'프로그래밍 공부 > 궁금한 정보들' 카테고리의 다른 글

SRPG 란?  (0) 2022.03.03
용어 정리  (0) 2022.02.17
if(!) if문 안에 !의 의미  (0) 2022.02.14
C++ 구조체와 클래스 차이  (0) 2022.02.04
문자열 _T 매크로, C++ 리터럴이란  (0) 2018.01.04

Right Value Reference 우측 값 참조

- 불필요한 메모리 복사를 방지하고 메모리를 이동시키는 방법

- 메모리의 할당, 복사, 해제 과정이 이루어지지 않아 성능향상

- move를 이해하기위해 필용한 개념인 것 같다.

 

좌측 값 (Lvalue) 와 우측 값 (Rvalue)

Lvalue = 7; 에서 좌측 값은 Lvalue이고 우측 값은 7 이다.

Lavlue2 = 31; 에서 좌측 값은 Lvalue2이고 우측 값은 31 이다.

 

Lvalue2 = Lvalue; 에서 Lvalue2는 좌측 값이다

Lvalue가 우측에 있기 때문에 우측 값이지 않을까? 라는 부분에서는

위의 식이 끝난 후에도 Lvalue의 값은 존재하므로 좌측 값이 된다.

 

우측 값과 좌측 값을 정확하게 구별하기 위해서는

식이 끝난 후에도 존재하면 좌측 값이고 존재하지않으면 우측 값이다 라고 알고 있으면 될 것같다.

 

좌측 값 참조

- 을 사용하여 좌측 값을 참조한다

Lvalue의 경우 좌측 값이므로 LeftValue 가 &을 사용하여 좌측 값을 참조 하였다.

7의 경우 우측 값이므로 LeftValue2가 &을 사용하여 좌측 값 참조를 하지 못하였다.

 

우측 값 참조

- && 을 사용하여 우측 값을 참조한다.

31의 경우 우측 값이므로 RightValue 가 &&을 사용하여 우측 값을 참조 하였다.

Lvalue의 경우 좌측 값이므로 RightValue 가 &&을 사용하여 좌측 값을 참조 하지 못하였다. 

'프로그래밍 공부 > modern C++' 카테고리의 다른 글

modern C++ Lambda  (0) 2022.02.25
modern C++ 범위 기반 for문 (rage-based for statement)  (0) 2022.02.18
auto  (0) 2022.02.17
스마트 포인터 weak_ptr  (0) 2022.02.17
스마트 포인터 shared_ptr  (0) 2022.02.15

c_str()

 

C++ string 을 C style의 const char* 문자열로 변환할 때 사용하는 함수

리턴 값

- 반환형 const char*

- string의 첫번째 문자의 주소 값 (포인터)을 const char*형으로 반환

 

#include<string> 추가 하지않는 경우

cout << str <<endl; 부분이 에러가 뜬다 사용하고 싶은 경우 string 헤더 추가

 

cout << ch <<endl; 의 경우

str(string의 변수)를 c_str()을 사용하여 const char* 형으로 변환하였으므로 출력이 된다.

 

즉 c_str();의 역할은 string 을 const char* 로 변환 해주는 역할을 한다.

'프로그래밍 공부 > STL' 카테고리의 다른 글

C++ STL set & multiset  (0) 2022.02.17
C++ STL deque란?  (0) 2022.02.17
C++ STL list 란?  (0) 2022.02.15
STL vector 란?  (0) 2022.02.13
C++ STL 이란?  (0) 2022.02.12

브루트포스 공격 (BRUTE FORCER)

- 사용자 패스워드를 알아내기 위한 공격방법

- 무차별 대입 공격방법

- 시간이 많다면 언젠가는 패스워드가 노출

 

무식하게 패스워드를 계속 대입

- 알파벳 순

- 딕셔너리 공격 (사전의 순으로 공격한다고해서 딕셔너리)

 

대응 밥법

잘못된 패스워드를 입력하였을 때

1. 응답 시간에 딜레이를 걸어준다.

2. 응답 시간에 딜레이를 랜덤하게 걸어준다.

3. 락킹 로그인 실패 시도가 많을 때 로그인 불가 대기 시간을 건다

-> 단점 실제 사용자를 사용하지못하게 막을 수 있다.

4. 실제 사용자가 로그인하는 것인지 확인하는 그림 맞추기 캡챠를 사용한다.

람다 (Lambda)

- 익명함수

- 익명의 함수 객체를 정의

- 성질은 함수 객체와 동일하나 이름이 없는 함수

- 알고리즘이나 비동기 메서드에 전달하는 몇 줄의 코드를 캡슐화하는데 사용

- 타입을 가지고 있지만 decltype 나 sizeof를 사용할 수 없다.

 

람다 사용법

[captures](parameters){body}(call lambda);

[captures] 

캡처 조항(Capture Clause)

- 람다의 body에서 어떤 변수를 어떻게 사용할지 낱

종류 내용
[] 같은 영역에 있는 모든 변수 접근 불가
[&] 같은 영역에 있는 모든 변수를 참조로 캡처
[=] 같은 영역에 있는 모든 변수를 값으로 캡처
[변수 i] 같은 영역에 있는 변수 i 만 값으로 캡처, 나머지 다른 변수들에는 접근 불가
[&변수 i] 같은 영역에 있는 변수 i 만 참조로 캡처, 나머지 다른 변수들에는 접근 불가
[&, 변수i] 같은 영역에 있는 모든 변수를  참조로 캡처, 변수 i 만 값으로 캡처
[=, &변수i] 같은 영역에 있는 모든 변수를 값으로 캡처, 변수 i 만 참조로 캡처

 

[] 경우 같은 영역에 있는 변수 접근 불가

[&] 같은 영역에 있는 모든 변수를 참조로 캡처

[=] 같은 영역에 있는 모든 변수를 값으로 캡처

 

총 코드

#include<iostream>
using namespace std;

int main()
{
	/*[]() {cout << "hello world" << endl; }();
	[](int i) {cout << "int i : " << i << endl; }(7);

	auto sum = [](auto a, auto b) {return a + b; };

	cout << sum(3, 1) << endl;*/

	int a = 4;
	int b = 8;
	int c = 6;

	//같은 영역에 있는 모든 변수 접근 불가
	//[]() {cout << a << endl; }();
	/*[&]() {cout << a << endl; }();
	[&]() { a = 5; cout << a << endl; }();*/
	//[=]() {cout << b << endl; }();

	[c]() {cout << c << endl; }()
}

MSB6006 "rc.exe"이(가) 종료되었습니다(코드:5). 가 뜬다

1. 프로젝트 -> 속성 -> 구성 속성 -> VC++ 디렉터리

1번 누르고 2번 누른다

2. 로컬디스크 -> Program Files (x86) -> Windows Kits -> 8.1 -> bin -> x86 폴더 설정해주면 된다.

 

인터넷을 찾아보았을 때 bin 까지만 설정해주면 된다는 글들을 보아 해보았는데

저의 경우에는 x86 까지 해주어야 해결이 되었습니다. :)

 

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류 MSB8020 The build tools for v141 (Platform Toolset = 'v141') cannot be found. To build using the v141 build tools, please install v141 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution". 

 

번역기

심각도 코드 프로젝트 파일 비표시 오류(Suppression) 상태 오류 MSB8020 v141(Platform Toolset = 'v141')용 빌드 도구를 찾을 수 없습니다. v141 빌드 도구를 사용하여 빌드하려면 v141 빌드 도구를 설치하세요. 또는 프로젝트 메뉴를 선택하거나 솔루션을 마우스 오른쪽 버튼으로 클릭한 다음 "솔루션 대상 변경"을 선택하여 현재 Visual Studio 도구로 업그레이드할 수 있습다. 

 

상단의 프로젝트(p) -> 구성속성 -> 일반 -> 플랫폼 도구 집합을 변경해주면 된다.

1. Git Bash를 실행시킨다

2. git remote -v 를 사용하여 현재 연결된 위치를 확인한다.

원하는 폴더가 아니면

git add origin remote 깃허브 홈페이지 레지스트리 들어간 뒤 주소 복사 붙여넣기로 

연결된 위치를 설정해준다.

 

3. git status 를 이용하여 변경된 사항이 있는지 확인 후에

4. git add *

5. git commit - "주석"

6. git push -u origin master

을 해준다.

'프로그래밍 공부 > Github' 카테고리의 다른 글

README 기본 꾸미기  (0) 2022.02.18
Github README에 사진 올리는 방법  (0) 2022.02.17
github 프로젝트 업로드 하기  (0) 2022.02.16

+ Recent posts