koenjazh-CNfresde
짬뽕얼큰하게의 맨땅에 헤딩 :: [논리 오류] 한번의 for문으로 여러 데이터의 hash값을 처리시 한 실수

1. 자료구조:


1
2
3
4
5
6
7
8
9
10
11
struct student{
 
char name[2];
 
unsigned long nameKey;
 
};
 
 
 
student gAllStudent[100];
cs

 


2. hash 함수: unsigned long getNameKey(char* name);



위와 같은 상황에서 이름의 hash값을 이용하여 gAllStudent에 있는 여러명의 학생 이름을 빠르게 찾을 때 한 실수다.


name1, name2 를 찾는다 했을때, getNameKey로 얻은 hash값을 nameKey1, nameKey2라고 하면


1
2
3
4
5
6
7
8
9
 
 for(int i = 0 ; i < 100; i++) {
  if (gAllStudent[i].nameKey == nameKey1) {
    if(strcmp(gAllStudent[i].name, name1) == 0) { ~~~~}
  }
  else if(gAllStudent[i].nameKey == nameKey2) {
    if(strcmp(gAllStudent[i].name, name2) == 0) { ~~~~}
  }
}

cs

 



위와 같이 작성했다..

그런데.. hash값이기 때문에, name1, name2이름은 다르고 nameKey1과 nameKey2 가 같은 경우가 존재한다.


이런 경우 name2도 첫번째 if문만 들어가기때문에... 문제가 발생한다. 따라서 else if문을 if문으로 변경하여 가볍게 해결할 수있다.


위 실수를하여.. 원인 분석에 꽤 많은 시간이 들어 정리해 놓는다.






블로그 이미지

짬뽕얼큰하게

,