๐Ÿ“Algorithm & Codingtest

๋น„ํŠธ๋งˆ์Šคํฌ(BitMask) ํŒŒ์ด์ฌ์—์„œ ํ™œ์šฉํ•˜๊ธฐ

Hush 2022. 7. 18. 17:43

๋น„ํŠธ๋งˆ์Šคํฌ ๊ธฐ๋ฒ•์€ ๋น„ํŠธ๋ฅผ "์ฐธ ๊ฑฐ์ง“ ์—ฌ๋ถ€๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ"์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋งˆ์น˜ DFS๋‚˜ BFS์˜ visited๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ True/False๊ฐ€ ๋‹ด๊ธด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด ๋ณธ ์ ์ด ์žˆ์„๊ฒƒ์ด๋‹ค.

๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋” ๋น ๋ฅธ ์†๋„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ…Œํฌ๋‹‰์ด ๋น„ํŠธ๋งˆ์Šคํฌ์ด๋‹ค.

 

AND(&), OR(|), XOR(^), NOT(not), SHIFT(>> , <<)๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

 

2์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ๋‹ค

def print2th(num):
    result=""
    while num > 0:
        result += str(num%2)
        num = num//2
    print(result[::-1])

 

i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ True๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

visited |= 1<<(i)

index๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์˜€๋‹ค.

1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฒฝ์šฐ i ๋Œ€์‹  i-1์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ False๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

visited &= not(1<<i)

 

i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ True์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค

if (visited&(1<<i)):
	#....

False์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ๊ทธ๋ƒฅ ์œ„์— not์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.