All is well

[YYBASIC0201/얌얌코딩] 기본기 복습 본문

C++/YYBASIC

[YYBASIC0201/얌얌코딩] 기본기 복습

D0YUN 2025. 2. 4. 08:13

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개념, 그외 함수