1. DAT 란?
DAT : Direct Access Table 배열의 index에 의미를 부여하여 카운트하는 것을 말한다.
빠르게 접근 가능하고 따로 불필요한 생성자가 없기때문에 알고리즘 문제를 푼다던지 하는 경우에 많이 사용된다.
하지만 사용하는 인덱스들의 차이가 클 경우 불필요한 저장공간을 차지하기도 하기 때문에
위의 경우에는 해시맵을 이용하기도한다.
2. 활용방안
- 위의 1번이미지를 dat로 표현하면 2번 이미지가된다.
1. DAT를 이용한 정렬 : 아스키코드가 이미 정렬된 순서를 가지고 있기때문에 밸류만큼 인덱스를 반복한다면 카운팅 정렬이 가능하다.
- AABBCDEE ...
2. 중복제거 : 밸류 2이상인 인덱스들을 밸류를 1이라고 본다면 중복제거까지 가능
- ABCDE
3. 어떠한 값의 인덱스를 기록 : 이중어레이의 좌표들을 두개의 DAT로 관리하면 알파벳순으로 빠른접근이 가능
4. 값의 존재확인 : 만약 어떤 어레이에서 a,b,c 세 값의 합이 K가 되도록한다고 할 때 전부를 서치하는 것이아닌
DAT[K-a-b] 로 c가 있나 확인가능
3. c++ 기본코드
index : 문자,
value : 해당 문자가 몇 개?
#include<iostream>
using namespace std;
int main() {
char temp[100] = "ABCCCADGGR";
int DAT[256] = { 0, }; // 기본적인 문자(Ascii code) : 128가지, char라는 data가 표현 가능한 종류 : 256가지
for (int i = 0; temp[i]; i++) {
DAT[temp[i]]++; // now라는 문자가 1개 추가
}
for (int i = 65; i<=91; i++) {
if (DAT[i]) cout << (char)i << " " << DAT[i] <<" / ";
}
return 0;
}
대문자 알파벳 A = 65 ~ Z=91