Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 개발자
- 커스텀로그
- 구조체포인터
- 언리얼
- 언리얼로그
- 연산자오버로딩
- 코딩테스트
- 탐색기법
- fstring
- c++자료구조
- dfs
- 개발
- 재귀함수
- unreal
- C++
- 내가해냄
- 프로그래밍
- 오늘의에러
- permutation
- 구조체
- 코딩
- UE5
- 얌얌코딩
- TPS
- 게임개발
- 백준
- 게임프로그래밍
- 자료구조
- 링크드리스트
- 미라클모닝
Archives
- Today
- Total
All is well
[YYBASIC0201/얌얌코딩] 기본기 복습 본문
Masking
- 마스킹이란 주어진 데이터에서 필요한 정보를 선택적으로 추출하는 기술로, 데이터를 감추고 싶을 때 특정 부분만 남겨두고 나머지를 가리거나 숨길 때 유용합니다.
- 마스킹이 사용되는 예시는 다음과 같습니다.
- 서버에서 데이터 전송 비용을 줄일 때
- 암호 해독을 위한 키로 사용할 때
// XOR 연산자를 이용한 Masking
- XOR은 두 개의 비트가 서로 다를 때 1, 같을 때 0을 반환하는 연산입니다.
- 특정 키를 사용해 XOR로 데이터를 변경하면, 원래 데이터를 추정하기 어렵게 암호화가 가능합니다.
비트 배열
- 비트 배열이란 특정 숫자를 이진수로 표현한 것입니다.
size_t : unsigned int 형
- unsigned int 는 음수가 존재하지 않는 자료형으로, 양수의 데이터만 다룰 때 사용됩니다.
- size_t는 데이터의 사이즈를 표현할 때 유용하게 사용됩니다.
index
- Base index는 기준이 되는 index를 의미합니다.
- Offset index는 특정 index에서부터 상대적인 거리만큼 떨어져 있는 index를 의미합니다.
- Base index로부터 얼마나 떨어져 있는가
//YYBASIC02_01
#include <iostream>
using namespace std;
int arr[5] = {1, 5, 1, 5, 3};
int isExist(int find)
{
for (size_t x = 0; x < 5; x++)
{
if (arr[x] == find)
{
return 1;
}
}
return 0;
}
void PrintResult(int num, int flag)
{
if (flag == 0)
cout << "didn't found " << num << endl;
else
cout << "found " << num << endl;
}
int getSum(int* arr, int idx, int arrSize)
{
int sum = 0;
for(size_t i = idx; i < arrSize; i++)
sum += arr[i];
return sum;
}
int isSame(char* A, char* B)
{
for (size_t i = 0; i < 256; i++)
{
if (A[i] != B[i])
return 0;
}
return 1;
}
void main()
{
/* 비트 배열을 이용하여 마스킹 해보기 */
#pragma region Masking
int vect[6] = {5, 1, 2, 6, 7, 4};
int mask[6] = {1, 0, 1, 1, 0, 1};
int result[6] = {};
// mask에 1로 표기된 것에 해당하는 vect 값만 가져오기
for (size_t i = 0; i < 6; i++)
{
if(mask[i] == 1)
result[i] = vect[i];
}
#pragma endregion
/* 다중 flag 및 다중 count */
int flag = 0;
int count = 0;
int finds[3] = {1, 2, 3};
// 다중 flag
#pragma region MultiFlag
cout << "< multi flag >" <<endl;
for (size_t x = 0; x < 3; x++)
{
flag = isExist(finds[x]);
PrintResult(finds[x], flag);
}
#pragma endregion
// 다중 count
#pragma region MultiCount
cout << "\n< multi count >" << endl;
for (size_t y = 0; y < 3; y++)
{
count = 0;
for (size_t x = 0; x < 5; x++)
{
if(arr[x] == finds[y])
count++;
}
cout << "n(" << finds[y] << ")" << " = " << count << endl;
}
#pragma endregion
/* BaseIndex, offsetIndex 개념 설명 */
#pragma region Base&offsetIndex
// BaseIndex : 시작 index
// OffsetIndex : 시작 index로부터 얼만큼 떨어져 있는가
#pragma endregion
/* getSum(int idx) 함수 만들기 */
#pragma region getSum()
int arrB[9] = {4, 3, 5, 1, 7, 5, 6, 8, 2};
int idx = 2, arrSize = 9;
cout << "\n< getSum() >" <<endl;
cout << "sum of arrB[" << idx << "]~arrB[" << arrSize - 1 << "] : " << getSum(arrB, idx, arrSize) << endl;
#pragma endregion
/* IsSame() 함수 만들기 */
#pragma region IsSame()
cout << "\n< isSame() >" << endl;
char strA[256] = "Hello";
char strB[256] = "Hello";
// 배열의 이름 : 배열 첫 번째 요소의 주소를 나타냄 - &arr[0]
// ∴ 배열의 이름을 == 비교를 하면 당연히 거짓이라고 나옴
// 두 배열이 같은지 알아보려면 같은 idx에 해당하는 요소의 값이 같은지 일일이 비교해야 함
if ( isSame(strA, strB) == 1 )
cout << "strA and strB is SAME." << endl;
else
cout << "strA and strB is DIFFERENT." << endl;
#pragma endregion
}
LV02 (기본기 복습) 마스킹, 다중 flag,count, Index개념, 그외 함수
'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0203/얌얌코딩] Direct 기법, 2중 포인터, 2차원 배열 (5) | 2025.02.05 |
|---|---|
| [YYBASIC0202/얌얌코딩] DAT(Direct Addressing Table) - Hash Table (0) | 2025.02.04 |
| [YYBASIC0105/얌얌코딩] 간단한 버전의 std::string 클래스 만들어보기 (0) | 2025.02.03 |
| [YYBASIC0104/얌얌코딩] 연산자 오버로딩 기본 (0) | 2025.02.03 |
| [YYBASIC0103/얌얌코딩] 생성자, 소멸자 (0) | 2025.02.02 |