본문 바로가기

C++/공부 정리

비트배열과 다중 카운트

비트배열이란?

1과 0만 들어있는 배열로 원하는 값만 뽑아 내기 위해 필요없는 값을 거르는 필터로 사용 가능

#include <iostream>
using namespace std;
int mask[5] = {1, 0, 1, 1, 0};
int main()
{
    int data[5] = {1, 2, 3, 4, 5};
    for(int i=0; i<5; i++)
    {
        if(mask[i] == 0)
            data[i] = 0;
    }
    for(int i=0; i<5; i++)
        cout << data[i] << ' ';
    return 0;
}

 

다중 count

입력 받은 숫자가 배열에 몇 개 존재하는지 출력

#include <iostream>
using namespace std;
int mask[3];
int main()
{
    int data[5] = {1, 5, 1, 4, 5}, cnt;
    for(int i=0; i<3; i++)
        cin >> mask[i];
    for(int i=0; i<3; i++)
    {
        cnt = 0;
        for(int j=0; j<5; j++)
        {
            if(data[j] == mask[i])
                cnt++;
        }
        cout << mask[i] << ":" << cnt << "개\n";
    }
    return 0;
}

 

다중 Flag

입력 받은 문자가 배열에 존재하는지 출력

#include <iostream>
using namespace std;
char arr[6] = "ADCAR";
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    char input[4];
    int flag = 0;
    cin >> input;
    for(int i=0; i<3; i++)
    {
        flag = 0;
        for(int j=0; j<5; j++)
        {
            if(input[i] == arr[j])
            {
                flag = 1;
                break;
            }
        }
        if(flag == 1)
        {
            cout << input[i] << ": 존재\n";
        }
        else
        {
            cout << input[i] << ": 없음\n";
        }
    }
    return 0;
}

 

다중 Flag 사용하지 않고 함수로 바꾸기

똑같이 동작하지만 설계가 더 편하고 가독성도 좋다.

#include <iostream>
using namespace std;
char arr[6] = "AVATA";
char input[3];
int isExist(char alp)
{
    for(int i=0; i<6; i++)
    {
        if(alp == arr[i])
            return 1;
    }
    return 0;
}
int main()
{
    cin >> input;
    for(int i=0; i<3; i++)
    {
        if(isExist(input[i]))
            cout << "find" << '\n';
        else
            cout << "not found" << '\n';
            
    }
            
    return 0;
}

 

Offset

기준 index로 부터 얼마나 떨어졌는지를 나타내는 용어이다.

index를 입력받고 연속된 4개의 배열 값의 합을 출력

#include <iostream>
using namespace std;
int arr[10] = {4, 3, 1, 5, 7, 6, 9, 10, 2, 8};

int getSum(int baseIndex)
{
    int sum = 0;
    for(int i=baseIndex; i<baseIndex+4; i++)
    {
        sum += arr[i];
    }
    
    return sum;
}
int main()
{
    int base;
    cin >> base;
    cout << getSum(base);
    
    return 0;
}

 

두 배열이 같은지 확인하는 법 (string 사용하지 않고)

Flag 사용

#include <iostream>
using namespace std;
char data1[5] = "HIFV", data2[5] ="HIFV";

int main()
{
    int flag = 0;
    for(int i=0; i<4; i++)
    {
        if(data1[i] != data2[i])
        {
            flag = 1;
            break;
        }
    
    }
    if(flag == 1)
        cout << "불일치";
    else
        cout << "일치";
    return 0;
}

isSame() 함수를 사용하기

#include <iostream>
using namespace std;
char data1[5] = "HIFV", data2[5] ="HIFV";

int isSame()
{
    for(int i=0; i<4; i++)
    {
        if(data1[i] != data2[i])
            return 1;
    }
    return 0;
}
int main()
{
    if(isSame())
        cout << "불일치";
    else
        cout << "일치";
    return 0;
}