Skip to content

Commit

Permalink
๐Ÿ”€merge: [Week20~21] BOJ Backtracking + Shortest Path - 2๋ฌธ์ œ + 2๋ฌธ์ œ ์™„๋ฃŒ (#79
Browse files Browse the repository at this point in the history
)

* โœจfeat: BOJ_15649.N๊ณผM(1) ๋ฌธ์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

์šฐ์„ ์ˆœ์œ„ ํ๋ผ๊ฑฐ๋‚˜ while ๋ฌธ ๋“ฑ์œผ๋กœ
์ด๋ ‡๊ฒŒ ์ €๋ ‡๊ฒŒ ์‹œ๋„ํ•˜๋‹ค ๋ชป ํ’€๊ณ 
๋‹ต์„ ๋ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค

์žฌ๊ท€๋ฅผ ์ƒ๊ฐ์€ ํ–ˆ์—ˆ์ง€๋งŒ ์ž˜ ๋ชป ์จ์„œ..
์žฌ๊ท€๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š๋„ค์š” ใ… ใ… 

๋ฐฑํŠธ๋ž˜ํ‚น์„ ๊ฒ€์ƒ‰ํ•˜๋‹ˆ ์ฃผ๋กœ ์žฌ๊ท€๋กœ ํ‘ผ๋‹ค๊ณ ..
๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฟ ํ’€์–ด๋ด์•ผ๊ฒ ๋„ค์š”..

์œ ํ˜•: ๋ฐฑํŠธ๋ž˜ํ‚น
๋‚œ์ด๋„: ์‹ค๋ฒ„ 3

* โœจfeat: BOJ_15649.N๊ณผM(9) ๋ฌธ์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์š”์ฆ˜ ์–ด๋ ต์Šต๋‹ˆ๋‹ค ใ… 
๋ฐฑํŠธ๋ž˜ํ‚น์€ ํƒ์ƒ‰ ๋Š๋‚Œ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”..
1๋ฒˆ ๋ฌธ์ œ์—์„œ ์ŠคํŠธ๋ง์œผ๋กœ ์ €์žฅํ•˜๋˜ ๋ฐฉ์‹์„ ๊ฐ€์ ธ์˜จ ํƒ“์ธ์ง€
์ค‘๋ณต ๊ฐ€๋Šฅ์—์„œ ๊ณ ์ƒ์„ ํ–ˆ๋Š”๋ฐ์š”

์ค‘๋ณต์ด ๋˜์ง€๋งŒ ๊ฐœ์ˆ˜ ์ œํ•œ์ด ์žˆ๋˜ ํ„ฐ๋ผ
์ž๊ธฐ ์ž์‹ ์˜ ๋’ค ๋ถ€ํ„ฐ ๋Œ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค

set์œผ๋กœ ๋ฌถ์–ด์„œ ์ถœ๋ ฅํ–ˆ๋”๋‹ˆ
๋ฌธ์ž์—ด์ด๋ผ 9 ๋ณด๋‹ค 10์ด ์•ž์œผ๋กœ ๊ฐ€์„œ ๊ณ„์† ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค

๋ฏธ๋ฆฌ ์ •๋ ฌ์„ ํ•˜๊ณ  check ์šฉ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ
if i not in check ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋‹ˆ
์ถœ๋ ฅํ•˜๋‹ˆ ์ค‘๊ฐ„์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๊ณ ..

๊ฒฐ๊ตญ map ์„ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•˜๊ณ  ๋ฌถ๋Š” ์‹์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
sorted(set(answer), key=lambda x: list(map(int, x.split())))
์ด๊ฒŒ ๋” ๋‚ฌ๊ตฐ์š”..
๋ญ”๊ฐ€ ํž˜๋“ค๊ฒŒ ํ’€์–ด์„œ ๊ฑฑ์ •์ด๋„ค์š”..

์œ ํ˜•: ๋ฐฑํŠธ๋ž˜ํ‚น
๋‚œ์ด๋„: ์‹ค๋ฒ„ 2

* โœจfeat: BOJ_11403.๊ฒฝ๋กœ์ฐพ๊ธฐ ๋ฌธ์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

์„ ์„ ๋”ฐ๋ผ๊ฐ„๋‹ค๋Š” ๋Š๋‚Œ์œผ๋กœ set ์„ ์ด์šฉํ•˜์—ฌ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ ์„ ๋ชจ์•„๋ดค์Šต๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ for ๋ฌธ์œผ๋กœ ํ•œ๋ฒˆ์— ๋งž์•˜์ง€๋งŒ ์‹œ๊ฐ„์ด 2484ms ๊ฐ€ ๋‚˜์™€์„œ
ํƒˆ์ถœ๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค ์‹œ๊ฐ„์ด 64ms ๋กœ ํ™• ์ค„์—ˆ๋„ค์š”

๊ทธ๋ƒฅ ํ’€์–ด๋ณด๊ธด ํ–ˆ๋Š”๋ฐ
ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค..

์œ ํ˜•: ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ
๋‚œ์ด๋„: ์‹ค๋ฒ„ 1

* โœจfeat: BOJ_18352.ํŠน์ •๊ฑฐ๋ฆฌ์˜๋„์‹œ์ฐพ๊ธฐ ๋ฌธ์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

๊ธธ์ฐพ๊ธฐ ๋Š๋‚Œ์œผ๋กœ ์ข€ ํ’€์–ด๋ณด๋ ค ํ–ˆ๋Š”๋ฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ธฐ์–ต์ด ์ž˜ ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๋ฅผ ๋„ฃ์–ด์„œ ํ•˜๋‹ค๊ฐ€ ๋ณด๋‹ˆ
์ฒซ ์‹œ์ž‘์ ์„ ์ฐพ๋Š” for ๋ฌธ์ด ํ•˜๋‚˜ ๋” ๋“ค์–ด๊ฐ”์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค.
set ์œผ๋กœ ๋ฐ”๊ฟ”๋ณด๋‹ˆ๊นŒ ๋ฐ”๋กœ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•ด์„œ ๊ทธ ์ฐจ์ด๊ฐ€ ์žˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ ์žฌ๊ท€๋ฅผ ์“ธ ๊ฒฝ์šฐ ํ˜ธ์ถœ์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๋ฆฌ์ปค์ „ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š”๋ฐ
์‹œ๊ฐ„๋งŒ ๊ดœ์ฐฎ๋‹ค๋ฉด
sys.setrecursionlimit(10**9)
์ด๋Ÿฐ ๊ฑธ ๋ถ™์—ฌ์„œ ๋„˜์–ด๊ฐ€๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€๋‚˜ while ๊ฐ™์€ ๋ฃจํ”„์—์„ 
ํƒˆ์ถœ๋ฌธ์ด ์ค‘์š”ํ•œ๋ฐ ์ž๊พธ ๋น ๋œจ๋ ค์„œ ๋‚˜์ค‘์—์•ผ ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค์ต์ŠคํŠธ๋ผ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ตํ˜€ ๋‘๋Š” ๊ฒƒ์ด ๋‚˜์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ ํ˜•: ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ๋ฐ์ดํฌ์ŠคํŠธ๋ผ
๋‚œ์ด๋„: ์‹ค๋ฒ„ 2
  • Loading branch information
HyowonSin committed Jul 26, 2023
1 parent 3f7a9e0 commit 5e17ab8
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 0 deletions.
20 changes: 20 additions & 0 deletions HyowonSin/week_20/BOJ_15649_M๊ณผM1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys

N, M = map(int, sys.stdin.readline().strip().split(' '))

answer = []


def dfs():
if len(answer) == M:
print(' '.join(map(str, answer)))
return

for i in range(1, N + 1):
if i not in answer:
answer.append(i)
dfs()
answer.pop()


dfs()
27 changes: 27 additions & 0 deletions HyowonSin/week_20/BOJ_15663_N๊ณผM9.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import sys

N, M = map(int, sys.stdin.readline().strip().split(' '))
arr = list(map(int, sys.stdin.readline().strip().split(' ')))

p = []
answer = []
index = []


def dfs(num_list, index):
if len(p) == M:
answer.append(' '.join(map(str, p)))
return

for i in range(len(num_list)):
if i not in index:
p.append(num_list[i])
index.append(i)
dfs(num_list, index)
p.pop()
index.pop()


dfs(sorted(arr), index)
for i in sorted(set(answer), key=lambda x: list(map(int, x.split()))):
print(i)
37 changes: 37 additions & 0 deletions HyowonSin/week_21/BOJ_11403_๊ฒฝ๋กœ์ฐพ๊ธฐ.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import sys

N = int(sys.stdin.readline().strip())
graph = []
for _ in range(N):
graph.append(list(map(int, sys.stdin.readline().strip().split(' '))))

node = {}
for i in range(N):
node[i] = set()
for j in range(N):
if graph[i][j] == 1:
node[i].add(j)

count = 0
result = [0 for _ in range(N)]
while count < N:
for i in range(N):
if result[i] == 1:
continue
before = node[i]
for j in node[i]:
if node[i] != node[j]:
node[i] = node[i].union(node[j])
if before == node[i]:
result[i] = 1
count += 1

for i in range(N):
for j in range(N):
if j in node[i]:
graph[i][j] = 1

for i in range(N):
for j in range(N):
print(graph[i][j], end=' ')
print()
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import sys
sys.setrecursionlimit(10**9)

N, M, K, X = map(int, sys.stdin.readline().strip().split(' '))

visited = [300001 for _ in range(N+1)]
visited[0] = 0
visited[X] = 0

node = {}
for i in range(N):
node[i+1] = set()

for i in range(M):
start, end = map(int, sys.stdin.readline().strip().split(' '))
node[start].add(end)

def search(node, start, visited, depth):
if depth > K:
return
for i in node[start]:
if visited[i] > depth:
visited[i] = depth
search(node, i, visited, depth + 1)

search(node, X, visited, 1)
answer = []
for i in range(len(visited)):
if visited[i] == K:
answer.append(i)

if len(answer) == 0:
print(-1)
else:
for i in answer:
print(i)

0 comments on commit 5e17ab8

Please sign in to comment.