Skip to content

Commit 16046fb

Browse files
committed
[BOJ]#15652.N๊ณผM(4)/ Silver3/45min
https://www.acmicpc.net/problem/15652
1 parent 4aaaf76 commit 16046fb

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"""
2+
๋ฐฑ์ค€ # 15652.N๊ณผ M(4)
3+
https://www.acmicpc.net/problem/15652
4+
5+
[๋ฌธ์ œ]
6+
- ์ž์—ฐ์ˆ˜ 1~ N ์ค‘ M ๊ฐœ ๊ณ ๋ฅธ ์ˆ˜์—ด => ์žฌ๊ท€ํ•จ์ˆ˜
7+
- ๊ฐ™์€ ์ˆ˜ ์ค‘๋ณต ์‚ฌ์šฉ , ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์€ ๋‹ค์ค‘ ์ถœ๋ ฅ ๋ถˆ๊ฐ€๋Šฅ
8+
- ๊ณ ๋ฅธ ์ˆ˜์—ด์€ ์˜ค๋ฆ„์ฐจ์ˆœ
9+
- ์ถœ๋ ฅ์€ ์˜ค๋ฆ„์ฐจ์ˆœ => - ์›์†Œ๊ฐ€ 1~ N์ž„์œผ๋กœ ์ด๋ฏธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Œ(๊ณ ๋ คx)
10+
[flow]
11+
1. check ๋ฅผ mxn ์˜ ํ–‰๋ ฌ๋กœ ์‚ฌ์šฉ ์—ฌ๋ถ€ ํ™•์ธ(์ค‘๋ณต ์‚ฌ์šฉ๊ณผ ์ค‘๋ณต ์ˆ˜์—ด ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด)
12+
2. ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ์ถœ๋ ฅ
13+
- ๋งค๊ฐœ๋ณ€์ˆ˜ m = result ์— ๋“ค์–ด๊ฐ„ ์›์†Œ๋“ค ๊ฐœ์ˆ˜ = ํ˜„์žฌ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์ˆ˜
14+
(1) m == M ,์ฆ‰ result์•ˆ์— M ๊ฐœ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด, ์ถœ๋ ฅ
15+
(2) m๋ฒˆ์งธ ์ž๋ฆฌ์— n์ด ๋“ค์–ด๊ฐ„ ๊ฒฝํ—˜์ด ์žˆ๋Š”์ง€ ํ™•์ธ - check[m][n-1] == 0
16+
-> ์‚ฌ์šฉ ๊ฐ€๋Šฅ
17+
์กฐ๊ฑด 2 : ์ฒซ result ์›์†Œ๋ฉด ๋ฐ”๋กœ ๋“ฑ๋ก
18+
์กฐ๊ฑด 3 : ์•„๋‹ˆ๋ฉด , ์ด์ „ ์ž๋ฆฌ์ˆ˜์— ๋“ฑ๋ก๋œ result ์›์†Œ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ์ง€ ๋“ฑ๋ก
19+
- ๋“ฑ๋ก์‹œ(result[m] = n) , check์—๋„ ์‚ฌ์šฉ ์ค‘ ๋“ฑ๋กํ•˜๊ธฐ( check[m][n-1] = 1)
20+
(3)m+1 ์ธ ์žฌ๊ท€ ํ•จ์ˆ˜ ์ˆ˜ํ–‰
21+
(4) m ๋ฒˆ์งธ ์ž๋ฆฌ์ˆ˜์—์„œ ๋“ค์–ด๊ฐˆ 1~N์ˆ˜ ํƒ์ƒ‰ ์™„๋ฃŒํ•˜๋ฉด
22+
-> check[m] ์€ ๋ชจ๋‘ 0์œผ๋กœ ๋ฆฌ์…‹ํ•˜๊ณ , m-1 ์ž๋ฆฌ์ˆ˜๋กœ backtracking
23+
24+
"""
25+
26+
import sys
27+
N, M = map(int, sys.stdin.readline().split())
28+
# 1. ๋ณ€์ˆ˜ ์ •์˜
29+
result = [0 for _ in range(M)]
30+
check= [[0 for _ in range(N)] for i in range(M) ] # row : m๋ฒˆ์งธ ์œ„์น˜ , column : N๊ฐœ ํ›„๋ณด๊ตฐ ์›์†Œ๋“ค์˜ m๋ฒˆ์งธ ์ž๋ฆฌ์ˆ˜์— ์‚ฌ์šฉ ์—ฌ๋ถ€
31+
32+
33+
def perm(m) :
34+
if m == M :
35+
print(*result)
36+
else : # m : 0,1,2 ...M-1
37+
for n in range(1, N+1) :
38+
# print(f"before m : {m} /n {n} -> check {check[m]}")
39+
if check[m][n-1] == 0 : # ๋นˆ ์ž๋ฆฌ
40+
if (m == 0) or (m < M and n >= result[m-1]) : # ์ฒซ๋ฒˆ์จฐ ์ž๋ฆฌ ๋“ฑ๋ก ์‹ฌ์‚ฌ -> pass
41+
result[m] = n # ์‚ฌ์šฉ ์ค‘ # ๊ทธ์™ธ์˜ ์ž๋ฆฌ ๋“ฑ๋ก ์‹ฌ์‚ฌ -> ์ด์ „ ์ž๋ฆฌ์ˆ˜ <= ํ˜„์žฌ ์ž๋ฆฌ์ˆ˜ ์กฐ๊ฑด ๋งŒ์กฑ(์ค‘๋ณต ์ถœ๋ ฅ ๋ฐฉ์ง€)
42+
check[m][n-1] = 1
43+
# print(f"m : {m} /n {n} -> check {check[m]}")
44+
# print(f"result { result}")
45+
perm(m+1)
46+
47+
# m ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋“ค์–ด๊ฐˆ 1~N์ˆ˜ ํƒ์ƒ‰ ์™„๋ฃŒ
48+
# ๊ทธ๋Ÿฌ๋ฉด check[m] ์€ 0์œผ๋กœ ๋ฆฌ์…‹
49+
check[m] = [0 for j in range(N)]
50+
51+
perm(0)
52+
53+

0 commit comments

Comments
ย (0)