|
숫자배열에 새로운 숫자(양수)를 추가할 경우, 인접한 세 숫자가 생기지 않을 경우에만 입력하고 싶습니다.
가령 5라는 숫자를 추가하고자할 경우, 기존배열에 4,6 이나 6,7 혹은 3,4라는 숫자가
이미 존재할 경우에는 입력을 포기하고 false를 반환하고, 없을 경우에만 숫자를 추가하고
true를 반환해야합니다.
vector<int> Data;
bool add(int val)
{
vector<int>::iterator it;
int diff;
unsigned char i,Bits=0;
Bits = 1 << 2;
for (it=Data.begin();it < Data.end();it++) {
diff=val - *it;
if (abs(diff) <3)
Bits|= 1 << diff+2;
}
for (i=0x7;i<=0x1c;i<<=1) // 00111 01110 11100
if ((Bits & i) ==i)
return false;
Data.push_back(val);
return true;
}
위와같이 대충 구현은 했는데, 아무리 생각해도 꽁수같네요. 좀더 일반적인 해결방법이 있을까요??
경시대회나가는 애들 문제집을 잠깐 봤는데, 열이 팍 올라오는군요.. 요즘 애들 무서워요 -_-;;;;
|