๐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์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.