๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SW์‚ฌ๊ด€ํ•™๊ต ์ •๊ธ€/๊ฐœ๋ฐœ์ผ์ง€ - TIL

[Week04] ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋น„ํŠธ ๋งˆ์Šคํ‚น

by young-ji 2022. 4. 26.

๋ฐฑ์ค€ ์™ธํŒ์› ์ˆœํšŒ ๋ฌธ์ œ(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

 

๋น„ํŠธ๋งˆ์Šคํ‚น ํ™œ์šฉ

~ ์ถ”๊ฐ€ ์˜ˆ์ • ~

์ฃผ์˜์‚ฌํ•ญ

  1.  intํ˜• ๋น„ํŠธ์—ฐ์‚ฐ์„ ํ• ๋•Œ๋Š”  intํ˜•์˜ ์ž๋ฆฟ์ˆ˜ 32๋น„ํŠธ์—์„œ ๋ถ€ํ˜ธ๋น„ํŠธ ํ•œ์ž๋ฆฌ๋ฅผ ์ œ์™ธํ•œ 31๋น„ํŠธ๋กœ ์ œํ•œ๋˜์–ด์žˆ์–ด, ๊ทธ ์ด์ƒ์œผ๋กœ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ๋˜๋ฉด ๋น„ํŠธ ๊ฐ’์ด ์ €์žฅ๋˜์ง€์•Š์„ ์ˆ˜ ์žˆ๋‹ค. 
  2. ๋น„ํŠธ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” ํ•ด๋‹น ์ž๋ฆฌ์˜ ๋น„ํŠธ์— ๋Œ€ํ•œ 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

๋Œ“๊ธ€