숫자 4개가 적혀있는 카드가 있다
card 1 : 1 2 3 4 5 6 7 8
card 2 : 1 2 3 4 9 10 11 12
card 3 : 1 2 5 6 9 10 13 14
card 4 : 1 3 5 7 9 11 13 15
하나코는 카드를 보고 숫자 하나를 떠올린다
이후 각 카드별로 떠올린 숫자가 있는지 Y/N 로 알려준다
길이가 4인 문자열이 입력되면, 하나코가 머릿속에 떠올린 숫자를
interger 로 리턴한다
"YNYY"
"YNNN"
"NNNN"
"YYYY"
"NYNY"
5
8
16
1
11
card mask 를 만들어 둔다
res = 0 을 두고, card 를 늘려가며 card mask 를 더해간다
단순 비트연산으로는 부적절
N을 제외한 나머지 Y에서 모두 존재해야 한다
마지막 예제 NYNY 에서 11 대신 3이 나왔다
아.. 시작할때 N을 하면 &= ~() 할때 의미가 없구나
마지막에 N 을 수행하게 해야
한번 더
theNumber(answer)
res = 0
card = 0
mask[] = {
0x1fe, 0x1e1e, 0x6666, 0xaaaa
}
for (it = answer.begin() it != answer.end() it++)
if (*it == 'Y')
if (res == 0)
res |= mask[card]
else
res &= mask[card]
card++
card = 0
for (it = answer.begin() it != answer.end() it++)
if (*it == 'N')
res &= ~(mask[card])
card++
for (i = 0 i < 16 i++)
if (res & 0x01)
return i
res = res >> 1
return i