๋ฐฑ์ค ์ธํ์ ์ํ ๋ฌธ์ (TSP)๋ฅผ ํ๋ ค๋ฉด ๋นํธ ๋ง์คํน์ ๊ดํ ๊ฐ๋ ์ด ํ์ํ์ฌ ๊ณต๋ถํ๊ฒ๋์๋ค.
ํด๋น ๋ฌธ์
https://www.acmicpc.net/problem/2098
2098๋ฒ: ์ธํ์ ์ํ
์ฒซ์งธ ์ค์ ๋์์ ์ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 16) ๋ค์ N๊ฐ์ ์ค์๋ ๋น์ฉ ํ๋ ฌ์ด ์ฃผ์ด์ง๋ค. ๊ฐ ํ๋ ฌ์ ์ฑ๋ถ์ 1,000,000 ์ดํ์ ์์ ์ ์์ด๋ฉฐ, ๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ 0์ด ์ฃผ์ด์ง๋ค. W[i][j]๋ ๋์ i์์ j
www.acmicpc.net
keywords
๋นํธ๋ง์คํน dp, ๋นํธ๋ง์คํน bfs, ๋นํธ๋ง์คํฌ ์์ด, ๋นํธ๋ง์คํฌ ์กฐํฉ
๋นํธ ๋ง์คํน
์ปดํจํฐ๋ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ์๋ฃ๋ฅผ ์ด์ง์๋ก ํํํ๋ค.
์ด์ ๊ฐ์ ํน์ฑ์ ์ด์ฉํด ์ ์์ ์ด์ง์ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ฐ๋ ๊ธฐ๋ฒ์ด๋ค.
check = [False] * 10 ์ ๊ฐ์ด ๋ฆฌ์คํธ๋ฅผ ํตํด ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ๋ ๋์ bit๋ฅผ ์ด์ฉํด์ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ๊ฐ๊ฒฐํ ์ฝ๋์ ๋น ๋ฅธ ์๋๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.
โ ์์ ๋ฉ๋ชจ๋ฆฌ์ ๋น ๋ฅธ ์ํ์๊ฐ์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅ (๊ทธ๋ฌ๋ ์์์ ์๊ฐ ๋ง์ง ์์์ผ ํจ)
โ ์งํฉ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ํํ ๊ฐ๋ฅ
โ ๊ฐ๊ฒฐํ ์ฝ๋
โ DP๋ ์์ด, ๋ฐฐ์ด ํ์ฉ๋ง์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์
๊ฐ ์ ์ ์ ๋๋ฌํ์๋ ์ ์ ์ ์ ๊ทผํด์ผํ๋ ๊ฐ์ด 1๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์ ์ ๋ง์ ์ฐจ์์ ๋ฐฐ์ด์ด ํ์ํ๋ค. ๊ฐ ์ ์ ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๊ฐ 26๊ฐ ์ผ๋, ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํฌํจํด์ 27์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํด์ผํ ๊น??โ๏ธโ๏ธ
๋จ์ํ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ์ํด(0,1์ด ์ ๋ถ์ธ) ๋ง์ ์ฐจ์์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ ์ฌ ๋ณด์ธ๋ค. ๊ทธ๋ฐ ์ธก๋ฉด์์ ๋นํธ๋ง์คํน์ด ํจ์จ์ ์ธ ์คํฌ์ด๋ผ๋ ๊ฒ์ ์์์๋ค. ์ข ์ข ๋นํธ์ฐ์ฐ์ ํ์ฉํ ์์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ฉ์์ด ๋ณด์๋๋ฐ ๋นํธ๋ง์คํน ๊ธฐ๋ฒ๋ ์ ์์๋๋ฉด ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์๊ฒ๊ฐ๋ค.
๋นํธ์ฐ์ฐ์
๋นํธ ์ฐ์ฐ์๋ ๋ง์ด๋ค ์๊ณ ์์ผ๋ ์๋ตํ๋ค.
- and( & ) or( | ) xor( ^ )
- not( ~ )
shift ์ฐ์ฐ์
- >> : 2์ง์ ์๋ฆฌ์๊ฐ ํ๋ ์ฆ๊ฐํ๋ฏ๋ก ๊ฐ์ *2๊ฐ ๋๋ค.
- << : 2์ง์ ์๋ฆฌ์๊ฐ ํ๋ ๊ฐ์ํ๋ฏ๋ก ๊ฐ์ /2๊ฐ ๋๋ค.
๋นํธ๋ง์คํฌ
๋ฐฉ๋ฌธ ๋ฐฐ์ด์์ ์ด๋ค ์ฐ์ฐ์ ํ๋์ง ์ํ๋์ง ์ ์ ํํ๋ก ์ ์ฅํ๊ณ , ๊ทธ๊ฑธ ์ด์ง์๋ก ์นํํด์ ๊ฐ ์๋ฆฌ์๋ง๋ค ์ด๋ค ์ฐ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ํ ๋นํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- 2์ง์ ๊ฐ ์๋ฆฌ๋ง๋ค ์์ ์ ์ํ์ฌ๋ถ๋ฅผ 0๊ณผ 1๋ก ํ ๋น
๋นํธ๋ง์คํน ํ๊ธฐ
์์ ์ถ๊ฐ
s |= ( 1 << num )
s ์ num์ ์ถ๊ฐํ๋ค. ์ฆ, num๋ฒ์งธ ๋นํธ๋ง 1์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
(1 << num) ์ num์ 1๋ก ์ธํ ํด ์ฃผ๋ ๋์์ด๋ฉฐ, or์ฐ์ฐ์ ์ด์ฉํด s์ ํฉ์ณ์ค๋ค.
์์ ์ญ์
s &= !( 1 << num )
! ( 1 << num )์ num๋ฒ์งธ ๋นํธ๋ง 0์ผ๋ก ๋ง๋ค๊ณ ๋๋จธ์ง๋ 1๋ก ๋ง๋ค์ด์ฃผ๊ธฐ ์ํ ๋์์ด๋ค.
and ์ฐ์ฐ์ ํตํด ๋๋จธ์ง ๋นํธ๋ ๋์ผํ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค.
์์ ํ ๊ธ
s ^= ( 1 << num )
s์ num์ด ์๋ค๋ฉด ์ถ๊ฐ, ์๋ค๋ฉด ์ญ์ ์ฐ์ฐ
์์ ์ฒดํฌ
print( 1 if s & (1 << int(op[1])) != else 0 ))
s์ num์ด ์์ผ๋ฉด 1, ์์ผ๋ฉด 0์ ์ถ๋ ฅํด์ฃผ๋ ์ฐ์ฐ์ด๋ค. and ์ฐ์ฐ์ ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด์ฌ์ผ 1์ ๋ฐํํ๋ค๋ ์ฑ์ง์ ์ด์ฉํ๋ค.
์์ ๋น์ฐ๊ธฐ/ ์ฑ์ฐ๊ธฐ
s = 0 #๋น์ฐ๊ธฐ
s = ( 1 << 21 ) - 1 # ์ฑ์ฐ๊ธฐ 10000..00000 - 1
๋นํธ๋ง์คํน ํ์ฉ
~ ์ถ๊ฐ ์์ ~
์ฃผ์์ฌํญ
- intํ ๋นํธ์ฐ์ฐ์ ํ ๋๋ intํ์ ์๋ฆฟ์ 32๋นํธ์์ ๋ถํธ๋นํธ ํ์๋ฆฌ๋ฅผ ์ ์ธํ 31๋นํธ๋ก ์ ํ๋์ด์์ด, ๊ทธ ์ด์์ผ๋ก ์ฐ์ฐ์ ํ๊ฒ๋๋ฉด ๋นํธ ๊ฐ์ด ์ ์ฅ๋์ง์์ ์ ์๋ค.
- ๋นํธ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ํด๋น ์๋ฆฌ์ ๋นํธ์ ๋ํ 0,1์ด ๋ฐํ๋๋ ๊ฒ์ด๋ฉฐ ๊ฒฐ๊ณผ๋ก ๋์ค๋ ๊ฐ์ ํด๋น ๋นํธ๋ก ์ฐ์ฐ๋ ์ ์ ๊ฐ์ด์ง 0์ด๋ 1์ด ์๋๋ค.
if s & (1 << int(op[1])) != 0 :
# do something
if s & (1 << int(op[1])) == 1 :
# ์๋ชป๋ ์ฌ์ฉ
๋นํธ ์ฐ์ฐ์ ์์ ์์ฌ๋ก ํ๋ ๊ทธ๋ ๊น์ง ใฐ๏ธโฐ ์ด์ฝ๐โ๏ธ
...
์ ์ธํ์ ์ํ๋ฅผ DP๋ก ํด๊ฒฐํ๊ธฐ์ํด ๋นํธ๋ง์คํน์ ์ฌ์ฉํด์ผ๋งํ๋ ์ด์ ๋ฅผ ๊ฐ๋จํ๊ฒ ๋งํด์ฃผ๋ ๋ธ๋ก๊ทธ ํ๋ ๋จ๊ธฐ๊ณ ๊ฐ๋๋น๋น..
https://real-012.tistory.com/86
[BOJ 2098] ์ธํ์ ์ํ(๋นํธ๋ง์คํฌ, ์์ธํ ์ค๋ช )
https://www.acmicpc.net/problem/2098 2098๋ฒ: ์ธํ์ ์ํ ์ฒซ์งธ ์ค์ ๋์์ ์ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 16) ๋ค์ N๊ฐ์ ์ค์๋ ๋น์ฉ ํ๋ ฌ์ด ์ฃผ์ด์ง๋ค. ๊ฐ ํ๋ ฌ์ ์ฑ๋ถ์ 1,000,000 ์ดํ์ ์์ ์ ์์ด๋ฉฐ, ๊ฐ..
real-012.tistory.com
'SW์ฌ๊ดํ๊ต ์ ๊ธ > ๊ฐ๋ฐ์ผ์ง - TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Week05] C์ธ์ด - Red Black Tree (0) | 2022.05.05 |
---|---|
[Week03] ์๊ณ ๋ฆฌ์ฆ - DFS / BFS ๋ฐฑ์ค ๋ฌธ์ (5) | 2022.04.21 |
[Week03] ์๊ณ ๋ฆฌ์ฆ - ์ ๋์จ ํ์ธ๋ (3) | 2022.04.20 |
[Week02] ์๊ณ ๋ฆฌ์ฆ - ํ (feat. python) (2) | 2022.04.14 |
[Week02] ์๊ณ ๋ฆฌ์ฆ - ์ด๋ถํ์ (5) | 2022.04.09 |
๋๊ธ