[ Algorithm ] μμ νμ Brute-Force
μ½λ© ν μ€νΈλ₯Ό μ€λΉνλ©΄μ λ³΄λ€ ννν κΈ°μ΄λ₯Ό μν΄ κ³΅λΆν μκ³ λ¦¬μ¦μ νλμ© μ 리ν΄λ³΄κ³ μ νλ€.
λ³Έ ν¬μ€νΈλ μμ νμμ λν΄ μ 리ν λ΄μ©μ΄λ€.
μμ νμ Brute-Force / Exhaustive search
μμ νμμ μμ΄λ‘ Brute-Force / Exhaustive search λΌκ³ νκ³ , λ§ κ·Έλλ‘ λͺ¨λ κ²½μ°μ μλ₯Ό μλνλ λ°©λ²μ΄λ€. μμ νμμ λ€μκ³Ό κ°μ κ²½μ°μ μμ£Ό μ°μΈλ€.
- ꡬνμ΄ κ°λ¨νκ³ , ν΄κ° μ‘΄μ¬νλ©΄ νμ μ°Ύμ
- π₯ μ λ ₯ κ°μ λ²μκ° μμ κ²½μ°
λͺ¨λ κ²½μ°μ μλ₯Ό λκΈ° λλ¬Έμ κ·Έλ§νΌ κ²½μ°μ μκ° λ§μμ§λ©΄ μκ°μ λ§μ΄ μμνλ€λ λ¨μ μ΄ μκΈ° λλ¬Έμ μ£Όμν΄μΌ νλ€. μ΄μ ν΄λΉνλ μκ³ λ¦¬μ¦μΌλ‘ BFS, DFS, λΉνΈλ§μ€ν¬μ λν΄ μ 리νμλ€.
μμ νμ : BFS
λλΉ μ°μ νμ BFS, Breadth-First Search μ΄λ λ£¨νΈ λ Έλμμ μμν΄ μΈμ ν λ Έλλ₯Ό λ¨Όμ νμνλ λ°©λ²μ λ§νλ€. λ€μμ DFS ν λλ λμ€κ² μ§λ§, μ΄ λ μκ³ λ¦¬μ¦μ νΉν β μ΄λ€ λ Έλλ₯Ό λ°©λ¬Ένλμ§ κΈ°μ΅ν΄μΌ νλ€. μ΄ λΆλΆμ΄ λΉ μ§λ€λ©΄ 무ν루νμ λΉ μ§ μνμ΄ μλ€.
BFS κ°μ κ²½μ°λ λ°©λ¬Έν λ Έλλ₯Ό μ°¨λ‘λ‘ in-out ν μ μμ΄μΌνκΈ° λλ¬Έμ FIFO First-In First-Out νλ₯Ό μ¬μ©νλ€. ν΄λΉ μκ³ λ¦¬μ¦μ λ λ Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘λ₯Ό μ°Ύκ±°λ μμμ κ²½λ‘λ₯Ό μ°Ύμ λ ν¨κ³Όμ μΌλ‘ μ°μΈλ€.
κ°λ¨ν μλ₯Ό λ€μ΄ μ΄λ₯Ό νμ΄μ¬μΌλ‘ ꡬνν΄λ³΄μ.
[λ¬Έμ ]
Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λͺ¨λ λμμ λ²νΈλ₯Ό ν μ€μ νλμ© μ€λ¦μ°¨μμΌλ‘ μΆλ ₯ν΄λΌ. μ΄ λ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λμκ° νλλ μ‘΄μ¬νμ§ μμΌλ©΄ -1μ μΆλ ₯νλ€.
import sys
from collections import deque
def bfs(graph, start, route):
queue = deque(start)
while queue:
now = queue.popleft()
for node in graph[now]:
# if not visited
if route[node] == -1:
route[node] + route[now] + 1
queue.append(node)
return
city, road, distance, start = map(int, sys.stdin.readline().split())
route = [-1] * (city + 1)
route[start] = 0
graph = [[] for _ in range(city+1)]
# directed graph
for _ in range(road):
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b)
bfs(graph, start, route)
# if answer distance K exist
if route.count(distance):
for i in range(1, city+1):
if route[i] == distance:
print(i)
else:
print(-1)
μμ νμ : DFS
κΉμ΄ μ°μ νμ DFS, Depth-First Search μ΄λ λ£¨νΈ λ Έλμμ μμν΄μ λ€μ λΈλμΉλ‘ λμ΄κ°κΈ° μ μ ν΄λΉ λΈλμΉλ₯Ό λκΉμ§ νμνκ³ λμ΄κ°λ λ°©λ²μ λ§νλ€.
DFSλ μ¬κ·λ‘ ꡬνμ΄ κ°λ₯νλ©°, BFSμ λ§μ°¬κ°μ§λ‘ β μ΄λ€ λ Έλλ₯Ό λ°©λ¬Ένλμ§ μ²΄ν¬ν΄μ€μΌ νλ€. BFSλ³΄λ€ κ΅¬νμ΄ κ°λ¨νλ€λ μ₯μ μ΄ μμ§λ§, λ¨μ κ²μ μλλ μλμ μΌλ‘ λ리λ€λ λ¨μ μ κ°μ§κ³ μλ€. DFSλ λͺ¨λ λ Έλλ₯Ό λ°©λ¬Έν λ μ£Όλ‘ μ¬μ©νλ€.
μ΄λ²μλ κ°λ¨ν μλ₯Ό λ€μ΄ νμ΄μ¬μΌλ‘ ꡬνν΄λ³΄κ² λ€.
[λ¬Έμ ]
μ«μ Nκ³Ό numberκ° μ£Όμ΄μ§ λ, Nκ³Ό μ¬μΉμ°μ°λ§ μ¬μ©ν΄μ νν ν μ μλ λ°©λ² μ€ N μ¬μ©νμμ μ΅μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
(1<= N <=9, 1<= number <=32000)
[μμ] N = 5, number = 12
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
β‘οΈ answer = 4
def solution (N, number):
answer = 0
# set : μ€λ³΅ μ²λ¦¬, in νμ μ 리
calc = [set() for i in range(9)]
# N < 8
for i in range(1, 9):
# possible number
# small << big
calc[i].add(int(str(N)*i))
for j in range(i//2 + 1):
# first, second for calculation (first < second)
for first in calc[j]:
for second in calc[i-j]:
calc[j].add(first + second)
calc[j].add(first - second)
calc[j].add(second - first)
calc[j].add(first * second)
if first != 0:
calc[j].add(second / first)
if second != 0:
calc[j].add(first / second)
# find the minimum Ns
if number in calc[j]:
return i
# μ΅μκ° > 8 : -1 λ°ν
return -1
μμ νμ : λΉνΈλ§μ€ν¬
Q. μ λΉνΈλ§μ€ν¬λ₯Ό μ¬μ©ν κΉ?
- DP, μμ΄, λ°°μ΄ νμ©λ§μΌλ‘ ν΄κ²°ν μ μλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄
- μ μ λ©λͺ¨λ¦¬ μ¬μ©λ
- λΉ λ₯Έ μνμκ°
- μ§ν©μ λ°°μ΄μ μΈλ±μ€λ‘ ννν μ μμ
μ€λͺ λ§μΌλ‘λ κ°μ΄ μ μ€μ§ μμΌλ, μλ λ¬Έμ λ₯Ό λΉνΈλ§μ€ν¬λ‘ μ κ·Όν΄λ³΄μ.
[λ¬Έμ ]
λΉμ΄μλ 곡μ§ν© Sκ° μ£Όμ΄μ‘μ λ, μλ μ°μ°μ μννλ νλ‘κ·Έλ¨μ μμ±νμμ€.
(1 β€ x β€ 20)
* add x: Sμ xλ₯Ό μΆκ°νλ€. Sμ xκ° μ΄λ―Έ μλ κ²½μ°μλ μ°μ°μ 무μνλ€.
* remove x: Sμμ xλ₯Ό μ κ±°νλ€. Sμ xκ° μλ κ²½μ°μλ μ°μ°μ 무μνλ€.
* check x: Sμ xκ° μμΌλ©΄ 1μ, μμΌλ©΄ 0μ μΆλ ₯νλ€.
* toggle x: Sμ xκ° μμΌλ©΄ xλ₯Ό μ κ±°νκ³ , μμΌλ©΄ xλ₯Ό μΆκ°νλ€.
* all: Sλ₯Ό {1, 2, ..., 20} μΌλ‘ λ°κΎΌλ€.
* empty: Sλ₯Ό 곡μ§ν©μΌλ‘ λ°κΎΌλ€.
import sys
m = int(sys.stdin.readline())
s = 0b0
for _ in range(m):
order = sys.stdin.readline()
try:
command, num = order.split()
num = int(num)
if com == 'add':
s = s | (0b1 << num)
elif com == 'remove':
s = s & ~(0b1 << num)
elif com == 'check':
Related Posts
π You need to log in to GitHub to write comments. π
If you can't see comments, please refresh page(F5).