Skip to content

Commit 53dc481

Browse files
authored
Merge pull request #122 from zaqquum/main
HONGJOO/1์›”2์ฃผ์ฐจ/2๋ฌธ์ œ
2 parents 8aebaa9 + c65220d commit 53dc481

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-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+
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
"""
2+
#15654. N๊ณผ M (5)
3+
https://www.acmicpc.net/problem/15654
4+
5+
- N๊ฐœ์˜ ์›์†Œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์ˆ˜์—ด ์ค‘, ๊ฐœ์ˆ˜๊ฐ€ m๊ฐœ์ธ ์ˆ˜์—ด๋“ค ์ฐพ๊ธฐ
6+
- ์‚ฌ์ „์ˆœ = ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅ
7+
- ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด => ์žฌ๊ท€
8+
# TIL
9+
q = [1,2,3]
10+
print(*q) > 1,2,3 # ํ•œ์ค„๋กœ ๋ฆฌ์ŠคํŠธ ์›์†Œ๋“ค ์ถœ๋ ฅ ๊ฐ€๋Šฅ
11+
"""
12+
import sys
13+
14+
#0. ์ž…๋ ฅ ๋ฐ›๊ธฐ
15+
N , M = map(int, sys.stdin.readline().split())
16+
# M๊ฐœ์˜ ์ˆ˜์—ด ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
17+
result = [0 for _ in range(M)]
18+
# ํ•ด๋‹น ์›์†Œ ์‚ฌ์šฉ ์—ฌ๋ถ€ check ํ•จ์ˆ˜
19+
check = [0 for _ in range(N)]
20+
# n ๊ฐœ ์ˆ˜์—ด ์›์†Œ ํ›„๋ณด๊ตฐ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ
21+
elements = list(map(int, sys.stdin.readline().split()))
22+
#์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌ for ์˜ค๋ฆ„์ฐจ์ˆœ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
23+
elements.sort()
24+
# print(elements)
25+
26+
# 1. m ๊ฐœ ์ˆ˜์—ด ์ฐพ๊ธฐ by ์žฌ๊ท€ ํ•จ์ˆ˜
27+
"""
28+
def fun(n) :
29+
if ์žฌ๊ท€์ข…๋ฃŒ ์กฐ๊ฑด
30+
else :
31+
์žฌ๊ท€๋กœ ๋‹ค์Œ ์Šคํ…Œ์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋“ค
32+
fun(n+-1) # ์žฌ๊ท€
33+
์ด์ „ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์žฌ๊ท€์ข…๋ฃŒ ์กฐ๊ฑด ์ข…๋ฃŒ ํ›„ ์‹คํ–‰
34+
35+
"""
36+
37+
# start point
38+
def perm(m) : # m : result ์•ˆ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์›์†Œ ๊ฐœ์ˆ˜ = ๋„ฃ์„ ์œ„์น˜
39+
if m == M : # result ๊ฐœ์ˆ˜ ๊ฐ™์œผ๋ฉด = ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด
40+
print(*result) # ์ถœ๋ ฅ
41+
42+
else :
43+
for i in range(N) : # ๋” ๋ฝ‘์•„์•ผ ํ•˜๋ฉด , N ๊ฐœ ํ›„๋ณด๊ตฐ ์ค‘์— ํ™•์ธ
44+
if check[i] == 0 : #ํ˜„์žฌ ํ›„๋ณด์›์†Œ(i) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
45+
result[m] = elements[i] # result์— ๋“ฑ๋ก
46+
check[i] = 1 # ์‚ฌ์šฉ์ค‘
47+
perm(m+1) # result ์— m+1 ๊ฐœ ๋“ค์–ด๊ฐ€ ์žˆ์Œ
48+
check[i] = 0 # ์‚ฌ์šฉ ์™„๋ฃŒ
49+
50+
perm(0 )
51+
52+
"""
53+
# (์ถ”๊ฐ€)์š”๊ฑด ์ถœ๋ ฅ๋œ ์ˆœ์—ด ์ค‘์— ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ
54+
55+
# start point
56+
def perm(m , start_point) : # m : result ์•ˆ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์›์†Œ ๊ฐœ์ˆ˜ = ๋„ฃ์„ ์œ„์น˜
57+
if m == M : # result ๊ฐœ์ˆ˜ ๊ฐ™์œผ๋ฉด = ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด
58+
print(*result) # ์ถœ๋ ฅ
59+
# print(check)
60+
for s in range(start_point+1,N):
61+
check[s] = 0 # ์‚ฌ์šฉ ์™„๋ฃŒ
62+
# print(f"ํ˜„์žฌ ; {check}")
63+
else :
64+
for i in range(N) : # ๋” ๋ฝ‘์•„์•ผ ํ•˜๋ฉด , N ๊ฐœ ํ›„๋ณด๊ตฐ ์ค‘์— ํ™•์ธ
65+
if check[i] == 0 : #ํ˜„์žฌ ํ›„๋ณด์›์†Œ(i) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
66+
result[m] = elements[i] # result์— ๋“ฑ๋ก
67+
check[i] = 1 # ์‚ฌ์šฉ์ค‘
68+
# print(f"์—…๋ฐ์ดํŠธ ์ค‘ {check}")
69+
perm(m+1, start_point) # result ์— m+1 ๊ฐœ ๋“ค์–ด๊ฐ€ ์žˆ์Œ
70+
start_point += 1 # ๋‹ค์Œ ์นธ์œผ๋กœ ์ด๋™
71+
72+
perm(0 , 0)
73+
"""

0 commit comments

Comments
ย (0)