-๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ค์์ ํน์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
-์ฆ, ํด๊ฐ ๋ ๋งํ์ง ์ฌ์ ์ ํ๋จํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ๋๋์๊ฐ์ฌ(Back-Tracking) ํ์ํจ
๋ด ํฌ์คํ
: [Python/ํ์ด์ฌ] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 15649 - N๊ณผ M (1)
์ด์ ํฌ์คํ
๊ณผ ๊ฐ์๋ฐ, ์ค๋ณต์ด ๊ฐ๋ฅํ๊ณ ๋น๋ด๋ฆผ์ฐจ์์ด๋ ์กฐ๊ฑด์ด ์ถ๊ฐ๋์๋ค.
์ ๊ณผ ๋๊ฐ์ด n,m๊ณผ num์ด๋ผ๋ list์ bt() ํจ์๋ฅผ ์ ์ํ์
bt()๋ ๋ ์ฌ๊ทํจ์๋ก ๊ตฌํํ ๊ป๋ฐ, ์ด์ ๊ณผ ์กฐ๊ฑด์ ๋ค๋ฅด๊ฒ ์ ์ํ๋ฉด ๋ ๊ฒ๊ฐ๋ค.
bt์ ๋งค๊ฐ๋ณ์ start๋ฅผ ์ ๋ฌ๋ฐ์ start~n๊น์ง ์ฆ๊ฐ์ํค๋ฉด์(๋น๋ด๋ฆผ์ฐจ์),
num์ append()ํ์ฌ num ๊ธธ์ด๊ฐ m์ด๋ฉด ์ถ๋ ฅ, m๋ณด๋ค ์์ผ๋ฉด bt(i)๋ฅผ ์ฌํธ์ถํ์
โbt(start)๋ฅผ i๋ก ํธ์ถํ๋ ์ด์
for loof์์ i๊ฐ start~n๋งํผ ์ฆ๊ฐํ ํ
๋ฐ, num[1]๊ฐ์ด num[0]๊ฐ๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ ค๋ฉด(๋น๋ด๋ฆผ์ฐจ์)
start๋ฅผ for loof์ i๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
โป1์ผ๋๋ 1์ ๋๊ธฐ๊ณ , 2์ผ๋๋ 2๋ฅผ ๋๊ธฐ๋ฉด์ "2,1"๊ณผ ๊ฐ์ ๋ด๋ฆผ์ฐจ์์ ์ํฉ์ ์์ ๊ฑธ๋ฌ๋ฒ๋ฆฌ๊ธฐ
(Back-Tracking)
n, m, num(list), bt(funtion)์ ์ ํ ์คํํ์
#bt()๋ ์ฌ๊ทํจ์๋ก, ์๋์ ๊ฐ์ด ์ค๊ณํ์
def bt(start):
if num๊ธธ์ด๊ฐ m์ผ๋:
๊ฒฐ๊ณผ์ถ๋ ฅ
for i๋ฅผ start๋ถํฐ n๊น์ง: #๋น๋ด๋ฆผ์ฐจ์
์๋ฆฟ์๋งํผ bt()ํธ์ถํ๋ฉฐ ์ซ์๋ฝ๊ธฐ
bt(1) #1๋ถํฐ ์์ํด์ผ ํ๋ฏ๋ก
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
num = []
def bt(start):
if len(num) == m:
print(*num)
return
for i in range(start,n+1):
num.append(i)
bt(i)
num.pop()
bt(1)
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
num = []
#bt()ํจ์์ ์์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ
def bt(start):
if len(num) == m:
print(*num)
return
#for loof๋ฅผ ๋งค๊ฐ๋ณ์ start๋ถํฐ n๊น์ง๋ง ๊ฒ์ฌ (๋น๋ด๋ฆผ์ฐจ์)
for i in range(start,n+1):
num.append(i) #num๊ฐ์ i๋ฅผ appendํ๊ณ ๋์
bt(i) #bt(i)๋ฅผ ์ฌํธ์ถํ๋ค (Back-Tracking)
num.pop()
bt(1)
โ์ด๋ป๊ฒ ๋์ํ๊ฒ ๋ ๊น
์์ธํ ๋์์์๋ ๋ด ํฌ์คํ : [Python/ํ์ด์ฌ] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 15649 - N๊ณผ M (1) ์ฐธ๊ณ
โปn,m = 4,2์ธ ๊ฒฝ์ฐ
์ ์ฒด ๋์์์๋ ์ ๋งํฌ์ ๋น์ทํ๋ฐ bt์ ๋งค๊ฐ๋ณ์ start๋ฅผ ์ ์ฉํ๋ ๋ฐ์ ๋ค๋ฅด๋ค.
๐๐ป๋์๊ณผ์
[1] bt(1) โ [1,1] return, pop โ [1] bt(2) .... โ [1,4] return, pop, pop โ
[2] bt(2) โ [2,2] ....
โปbt์ i์ ๊ฐ์ ๋ฐ๋ผ start๋ฅผ ์ ๋ฌํ์ฌ ์คํ๋๋ฏ๋ก ์ค๋ฆ์ฐธ์์ผ๋๋ง ์คํ๋๋ค
โป์ด๊ธฐ ์๊ณ ๋ฆฌ์ฆ
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
num = []
def bt():
if len(num) == m:
print(*num)
return
for i in range(1,n+1):
#๋งค๊ฐ๋ณ์ ๋์ if๋ฌธ์ผ๋ก ์กฐ๊ฑด์ ๊ฑธ์ด Back-Tracking ๊ตฌํ
if len(num)==0 or i>= num[-1]:
num.append(i)
bt()
num.pop()
bt()
โ๋ด ์๊ณ ๋ฆฌ์ฆ์ด ํ๋ฆฐ ์ด์
ํ๋ฆฌ์ง์์๋ค. ์ ๋ต์ด๋ค.
๊ทธ๋ฌ๋ ๋ด ํ์ด๋ bt() ํธ์ถ๋ ๋๋ง๋ค for loof์์ if ์กฐ๊ฑด๋ฌธ์ ๋งค๋ฒ ํ์ธํ๋ค.
๋ฌผ๋ก ์ด๊ฒ Back-Tracking์ ์ ์์ด๊ธด ํ๋,
์ฒ์๋ถํฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ฉด ๋ถํ์ํ ๋น๊ต๊ณผ์ ์ ์ค์ผ ์ ์๋ค.