개발자 데뷔!

[C/C++ 8.1] 알고리즘 - DAT 본문

알고리즘 & 자료구조/알고리즘 (Algo)

[C/C++ 8.1] 알고리즘 - DAT

물꼮이 2022. 3. 16. 10:12

DAT : Direct Addressing Table 

 

각 값이 저장되어있는 배열의,
해당 값을 그대로 index로 사용한 또다른 배열에
그 값의 count 개수를 저장하는 방식

 

int dat[10] ={0};     // DAT 에서 0초기화가 매우 중요 !!! ***

DAT 사용

 - 있는 문자 표시 하기 

//Level 18

//1번						// Direct Addressing Table
int main() {
	char CardList[16];
	int dat[100] = { 0 };		// 문자를 index로 받는 배열
	int i = 0;
	int cnt = 0;
	cin >> CardList;
	while (CardList[i] != '\0') {
		dat[CardList[i]] = 1;		//dat[index]가 1로 바뀜
		i++;
	}
	//갯수(문자종류)세기
	for (int i = 0; i < 100; i++) {
		if (dat[i] == 1)
			cnt++;
	}
	cout << cnt << "개";
	return 0;
}

 

- 2차원 배열에서, 있는 숫자 개수 count 하기 

//2번
int main() {							// DAT 로 숫자별 등장개수세기 !!!!!!!!!!!!!!!!!! ***************************정리
	int arr[3][4] = { 65000,35,42,70,70,35,65000,1300,65000,30000,38,42 };
	int dat[100000] = { 0 };
	int max,idx;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			dat[arr[i][j]]++;			//dat[index] 에 개수 세기!    *index는 주어진 배열에 입력 된 값
		}
	}
	max = 0, idx = 0;
	for (int i = 0; i < 100000; i++) {
		if (dat[i] > max) {
			max = dat[i];
			idx = i;
		}
	}
	cout << idx;
	return 0;
}

 

- char 2차원 배열에서 알파벳 count

//8번
int main() {
	char input[3][10];
	int dat[100] = { 0 };	//알파벳 count용 배열
	int flag = 0;
	for (int i = 0; i < 3; i++)
		cin >> input[i];
        
	//알파벳 별 숫자세기
	for (int i = 0; i < 3; i++) {
		int j = 0;
		while (input[i][j] != '\0') {
			dat[input[i][j]]++;
			j++;
		}
	}
	for (int i = 0; i < 100; i++) {
		if (dat[i] > 1)
			flag = 1;	//2개이상 같은 게 있으면 flag 1
	}
	if (flag == 1)
		cout << "No";
	else if (flag == 0)
		cout << "Perfect";
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


등급별로 구간범위를 나누어, 구간count하기 

//7번
int calcul(int lev_cnt[4],int s) {		//구간별 등급 구간을 2차원 배열에 저장함
	int levelTable[4][2] = { 10,20,30,60,100,150,200,300 };	// 10~20, 30~60, 100~150, 200~300
	for (int i = 0; i < 4; i++) {
    	// 그 범위에 해당된다면, 
		if (levelTable[i][0] <= s && levelTable[i][1] >= s)		
			lev_cnt[i]++;		 //구간별 index그대로 써서 count
	}
	return 0;
}
int main() {
	int lev_cnt[4] = { 0 };
	// 입력받음
	int calro[6];
	for (int i = 0; i < 6; i++) {
		cin >> calro[i];
	}
	//함수에 입력
	for (int i = 0; i < 6; i++) {
		calcul(lev_cnt, calro[i]);	// 함수에 count배열 입력받기
	}
	//출력
	for (int i = 0; i < 4; i++) {
		cout << "lev" << i << ":" << lev_cnt[i]<<endl;
	}
	return 0;
}