Skip to content

Commit a820733

Browse files
authored
Merge branch '24-Algorithm:main' into main
2 parents 241f2a3 + d461a90 commit a820733

14 files changed

+405
-0
lines changed

โ€Ž.DS_Storeโ€Ž

0 Bytes
Binary file not shown.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
์‹คํŒจ
3+
1. ๊ฐ€์žฅ ํฐ ์ž๋ฆฌ์ˆ˜ ๋น„๊ต -> ์ž๋ฆฌ์ˆ˜ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜
4+
0. graph
5+
idx : numbers
6+
value : [0,0,0,-1] # ex 62 => [6,2,False,False]
7+
# ์กฐ๊ฑด 2.
8+
3,30,300 ๋น„๊ต -> 3 > 30> 300 ์šฐ์„ ์ˆœ์œ„
9+
#๋ฐ˜๋ก€
10+
1) 110 vs 1 > 1+110
11+
2) [12, 1213] -> 1213+12
12+
"""
13+
14+
def solution(numbers):
15+
answer = ''
16+
#0. graph ๋งŒ๋“ค๊ธฐ
17+
graph = list()
18+
for n in numbers:
19+
p = 4-len(str(n))
20+
if p > 0 :
21+
douple_n = str(n)*p
22+
else :
23+
douple_n = str(n)
24+
graph.append([douple_n[:4], p ]) # ์ž๋ฆฌ์ˆ˜ ๋งž์ถฐ์ฃผ๊ธฐ(4์ž๋ฆฌ)
25+
# print(graph)
26+
#2.์ •๋ ฌ : ๋†’์€ ์ž๋ฆฌ์ˆ˜์˜ ๊ฐ’์ด ํฐ ์ˆœ์„œ ๋Œ€๋กœ
27+
graph.sort(key=lambda x : x[0] , reverse = True)
28+
# print(graph)
29+
#3. ํ•ฉ์น˜๊ธฐ
30+
answer=""
31+
for i in range(len(graph)):
32+
num = graph[i][0] ; position = 4-graph[i][1]
33+
answer += str(int(num[:position]))# "000","0" ๊ฒฝ์šฐ 0์œผ๋กœ ์ฒ˜๋ฆฌ
34+
35+
return answer
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
# ๊ณ„์ˆ˜ ์ •๋ ฌ idea ์ ์šฉ
3+
"""
4+
5+
def solution(topping):
6+
answer = 0 # ๊ณตํ‰ํ•˜๊ฒŒ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
7+
# 0, graph
8+
forward = set()
9+
backward = dict()
10+
# 1. key ์ข…๋ฅ˜, value: toppping ์ค‘๋ณต ๊ฐœ์ˆ˜
11+
for t in topping:
12+
backward[str(t)]= backward.get(str(t),0)
13+
backward[str(t)] += 1
14+
print(backward)
15+
#2. forward vs backward
16+
for t in topping :
17+
# f ์—์„œ t๊ฐ€ ์ถ”๊ฐ€๋จ == b์—์„œ t ๋น ์ง
18+
forward.add(t)
19+
backward[str(t)] -=1
20+
if backward[str(t)] == 0 :
21+
del backward[str(t)]
22+
23+
# ํ† ํ•‘ ์ข…๋ฅ˜ ๊ฐ™์€ ๊ฒฝ์šฐ = ๊ณตํ‰ ํ•œ ๊ฒฝ์šฐ
24+
if len(forward) == len(backward.keys()):
25+
answer+=1
26+
27+
return answer
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
์‹œ์ž‘ = 1
3+
if ์‹œ์ž‘ ~ # ๋…ธ๋“œ(N๊ฐœ) ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ <= K : ๋ฐฐ๋‹ฌ ๊ฐ€๋ŠฅTrue
4+
๋‹ค์ต์ŠคํŠธ๋ผ
5+
"""
6+
import heapq
7+
INF = 2001
8+
9+
def dikstra(graph, distance, start) :
10+
#2. distance ์ดˆ๊ธฐํ™” : (0,start)๋กœ ์ดˆ๊ธฐํ™” / q์— (0,start ๋„ฃ๊ธฐ)
11+
q= []
12+
distance[start] = 0
13+
heapq.heappush(q,(0,start))
14+
#3. q์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ(start -> X) & ๋ฐฉ๋ฌธx ๋…ธ๋“œ ์„ ํƒ
15+
while q :
16+
dist , now = heapq.heappop(q) # A->X
17+
if distance[now] < dist: # ๋ฐฉ๋ฌธ ์™„๋ฃŒ
18+
continue
19+
#4. Cost(X->B)๊ณ„์‚ฐ + Cost(A->X) < Cost(A->B) => distance ์—…๋ฐ์ดํŠธ + q์— ๋„ฃ๊ธฐ
20+
# graph ์ธ์ ‘ ๊ฐ„์„ (i[1]) , dist, ํ˜„distance[B]
21+
for i in graph[now]: # i = (b,c)....
22+
cost = dist + i[1]
23+
if cost < distance[i[0]] :
24+
distance[i[0]] = cost
25+
heapq.heappush(q,(cost,i[0]))
26+
return distance
27+
28+
def solution(N, road, K):
29+
# input
30+
graph = [[] for _ in range(N+1)]
31+
distance = [INF]*(N+1) # ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ทธ๋ž˜ํ”„
32+
33+
#0 ๊ทธ๋ž˜ํ”„ ํ•„๋“œ ์ •์˜ a : [(b,c)...] #์–‘๋ฐฉํ–ฅ
34+
road.sort()
35+
for r in road :
36+
a=r[0] ; b = r[1] ; c= r[2]
37+
graph[a].append([b,c])
38+
graph[b].append([a,c])
39+
40+
# ๋‹ค์ต์ŠคํŠธ๋ผ
41+
distance = dikstra(graph ,distance, 1)
42+
43+
# ๊ฑฐ๋ฆฌ < K ์ธ ๋งˆ์„ ๊ฐœ์ˆ˜
44+
count = 0
45+
for city in range(1, N+1) :
46+
if distance[city] <= K :
47+
count+=1
48+
return count
49+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def solution(s):
2+
answer = ''
3+
li = list(map(int,s.split(" ")))
4+
li.sort() # ์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌ
5+
answer= str(li[0]) + " "+str(li[-1]) #"์ตœ์†Œ ์ตœ๋Œ€"
6+
# print(answer)
7+
return answer
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
4 4 2 1 # ๋„์‹œ ๊ฐœ์ˆ˜ n , ๋„๋กœ ๊ฐœ์ˆ˜ m , ๊ฑฐ๋ฆฌ ์ •๋ณด k , ์ถœ๋ฐœ ๋„์‹œ ๋ฒˆํ˜ธ x
3+
1 2
4+
1 3
5+
2 3
6+
2 4 # 2~m ๋ฒˆ a -> b
7+
๋‹ค์ต์ŠคํŠธ๋ผ
8+
"""
9+
import heapq
10+
#0 input
11+
INF = 20000
12+
city_count , road_count , target_km , start =map(int,input().split())
13+
14+
#1. graph ๊ทธ๋ฆฌ๊ธฐ -> ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ , ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”
15+
graph = [[] for i in range(city_count+1) ]
16+
distance = [INF]* (city_count+1)
17+
18+
for _ in range(road_count):
19+
a,b = map(int, input().split())
20+
# a -> b ,b ๋Š” a ์—์„œ ๊ฐˆ์ˆ˜ ์žˆ๋Š” ์ธ์ ‘ํ•œ city
21+
for j in range(len(graph)):
22+
if a == j:
23+
graph[a].append((b,1))
24+
25+
26+
# ๋‹ค์ต์ŠคํŠธ๋ผ
27+
#1. ์ดˆ๊ธฐ ๋…ธ๋“œ ์„ค์ • #2. ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ตœ๊ธฐํ™”
28+
q =[]
29+
distance[start]=0
30+
heapq.heappush(q, (0,start))
31+
# 2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ(heappop) & ๋ฐฉ๋ฌธ x ๋…ธ๋“œ ์„ ํƒ
32+
while q :
33+
dist , now = heapq.heappop(q)
34+
if distance[now] < dist :
35+
continue
36+
#4, Cost(A->X) + Cost(X->B) < Cost(A->B) : ์—…๋ฐ์ดํŠธ & push
37+
for i in graph[now]:
38+
cost = dist + i[1]
39+
if cost < distance[i[0]] :
40+
distance[i[0]] = cost
41+
heapq.heappush(q,(cost,i[0]))
42+
43+
islenK = False
44+
for i in range(1, city_count+1):
45+
if distance[i] == target_km :
46+
islenK = True
47+
print(i)
48+
if not islenK :
49+
print(-1)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
INF = int(1e9) #๋ฌดํ•œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ‘์Šค์˜ฌ 10์–ต ์„ค์ •
2+
3+
# ๋…ธ๋“œ ๊ฐœ์ˆ˜ & ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ ์ž…๋ ฅ
4+
n = int(input())
5+
m = int(input())
6+
#1. graph ์„ค์ • -์ธ์ ‘ ํ–‰๋ ฌ(2์ฐจ์› , nxn ) , ์ดˆ๊ธฐํ™”
7+
graph = [[INF]*(n+1) for _ in range(n+1)]
8+
9+
#1-1. ์ž๊ธฐ ์ž์‹ ์—์„œ ์ž๊ธฐ ์ž์‹  ๊ฐ€๋Š” ๋น„์šฉ {Cost (A->A)}= 0 ์ดˆ๊ธฐํ™”
10+
for a in range(1,n+1) :
11+
for b in range(1,n+1):
12+
if a==b:
13+
graph[a][a] = 0
14+
15+
#1-2 .๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„, ๊ทธ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” : Cost(A->B) = ์ดˆ๊ธฐ๊ฐ’
16+
for _ in range(m):
17+
# Cost(A->B) = c
18+
a,b,c = map(int, input().split())
19+
graph[a][b]= c
20+
21+
#2. ํ”Œ๋กœ์ด๋“œ ์›Œ์ƒฌ ์ ํ™”์‹ ์ˆ˜ํ–‰
22+
# a->b : a->k->b vs a->b
23+
for k in range(1,n+1):
24+
for a in range(1,n+1):
25+
for b in range(1,n+1):
26+
graph[a][b] = min(graph[a][b], graph[a][k]+ graph[k][b])
27+
28+
# ์ถœ๋ ฅ
29+
for a in range(1,n+1):
30+
for b in range(1,n+1):
31+
if graph[a][b] == INF :
32+
print("INF", end="")
33+
else :
34+
print(graph[a][b], end ="")
35+
print()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import sys
2+
from collections import deque
3+
sys.setrecursionlimit(10**5) # ์ตœ๋Œ€ ์žฌ๊ท€ํ•œ๋„ ๊นŠ์ด
4+
input = sys.stdin.readline
5+
6+
# dfs ํ•จ์ˆ˜ ์ •์˜
7+
def dfs(start):
8+
print(start, end=' ') # ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
9+
dfs_visited[start] = 1 # ํ•ด๋‹น ๊ฐ’์„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.
10+
for u in sorted(graph[start]): # ํ•ด๋‹น ๊ฐ’๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์žฌ๊ท€ ํƒ์ƒ‰ํ•œ๋‹ค.
11+
if not dfs_visited[u]:
12+
dfs(u)
13+
14+
# bfs ํ•จ์ˆ˜ ์ •์˜
15+
def bfs(start):
16+
queue = deque([start])
17+
18+
while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณต
19+
u = queue.popleft() # ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค.
20+
if not bfs_visited[u]: # ํ•ด๋‹น ๊ฐ’์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
21+
print(u, end=' ') # ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
22+
bfs_visited[u] = 1 # ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.
23+
for v in sorted(graph[u]): # ํ•ด๋‹น ๊ฐ’๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
24+
if not bfs_visited[v]:
25+
queue.append(v)
26+
27+
# ์ •์ , ๊ฐ„์„ , ์‹œ์ž‘ํ•  ์ •์  ์ดˆ๊ธฐํ™”
28+
n, m, v = map(int, input().strip().split()) # n: ์ •์  ๊ฐœ์ˆ˜ / m: ๊ฐ„์„  ๊ฐœ์ˆ˜ / v: ์‹œ์ž‘ ๋ฒˆํ˜ธ
29+
dfs_visited = [0] * (n + 1) # DFS ๋ฐฉ๋ฌธ ๊ธฐ๋ก
30+
bfs_visited = [0] * (n + 1) # BFS ๋ฐฉ๋ฌธ ๊ธฐ๋ก
31+
graph = [[] for _ in range(n + 1)] # ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
32+
33+
# ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ
34+
for _ in range(m):
35+
a, b = map(int, input().strip().split())
36+
graph[a].append(b)
37+
graph[b].append(a)
38+
39+
dfs(v) # DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
40+
print() # ์ค„๋ฐ”๊ฟˆ
41+
bfs(v) # BFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
def solution(record):
2+
answer = []
3+
dict = {}
4+
5+
# ์‚ฌ์šฉ์ž DB ๋”•์…”๋„ˆ๋ฆฌ
6+
for i in range(len(record)):
7+
temp = record[i].split()
8+
if temp[0] == 'Enter' or temp[0] == 'Change':
9+
dict[temp[1]] = temp[2]
10+
11+
# Enter, Change, Leave ์ˆœํšŒ
12+
for i in range(len(record)):
13+
temp = record[i].split()
14+
if temp[0] == 'Enter':
15+
answer.append(f"{dict[temp[1]]}๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")
16+
elif temp[0] == 'Leave':
17+
answer.append(f"{dict[temp[1]]}๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")
18+
19+
20+
return answer
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import sys
2+
sys.setrecursionlimit(10**6) # ์ตœ๋Œ€ ์žฌ๊ท€ํ•œ๋„ ๊นŠ์ด
3+
input = sys.stdin.readline
4+
5+
# ์ดˆ๊ธฐํ™”
6+
n, m = map(int, input().strip().split()) # n: ์ˆ˜์˜ ๊ฐœ์ˆ˜, m: ์กฐ๊ฑด์œผ๋กœ ์ฃผ์–ด์ง„ ํ•ฉ
7+
arr = list(map(int, input().strip().split())) # ์ˆ˜์—ด
8+
9+
prefix_sums = [0] * n
10+
prefix_sums[0] = arr[0]
11+
12+
# ๋ˆ„์ ํ•ฉ ๊ณ„์‚ฐ
13+
for i in range(1, n):
14+
prefix_sums[i] = prefix_sums[i-1] + arr[i]
15+
16+
# ๋‚˜๋จธ์ง€ ๊ฐ’ ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•  ํ•ด์‹œ๋งต
17+
mod_count = {}
18+
mod_count[0] = 1 # ์ฒ˜์Œ๋ถ€ํ„ฐ M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์ดˆ๊ธฐํ™”
19+
count = 0
20+
21+
# ๋ˆ„์ ํ•ฉ ๋ฐฐ์—ด ์ˆœํšŒใ…ฃ
22+
for p in prefix_sums:
23+
mod = p % m
24+
if mod in mod_count: # ๋™์ผํ•œ ๋‚˜๋จธ์ง€๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ
25+
count += mod_count[mod] # ํ•ด๋‹น ๋‚˜๋จธ์ง€ ๊ฐ‘์‹€ ๋นˆ๋„์ˆ˜๋งŒํผ count์— ๋”ํ•ด์คŒ
26+
mod_count[mod] += 1 # ํ•ด๋‹น ๋‚˜๋จธ์ง€ ๊ฐ’์˜ ๋นˆ๋„์ˆ˜ +1
27+
else:
28+
mod_count[mod] = 1 # ์ƒˆ๋กœ์šด ๋‚˜๋จธ์ง€ ๊ฐ’ ์ถ”๊ฐ€
29+
30+
print(count)

0 commit comments

Comments
ย (0)