Skip to content

Commit c4b1b78

Browse files
authored
Merge branch '24-Algorithm:main' into main
2 parents 8e74048 + b0ee7e9 commit c4b1b78

11 files changed

+291
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
def solution(s):
2+
answer = 0
3+
opps = 1
4+
5+
if s[0] == "+" :
6+
opps = 1
7+
answer = int(s[1:])
8+
elif s[0] == "-" :
9+
opps = 0
10+
answer = int(s[1:]) * (-1)
11+
else :
12+
answer = int(s)
13+
14+
15+
return answer
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def solution(num):
2+
answer = ''
3+
if num == 0 or num %2 ==0 : # even
4+
answer = "Even"
5+
elif num % 2 == 1 : # odd
6+
answer = "Odd"
7+
return answer
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import sys
2+
from collections import deque
3+
4+
def topology_sort() :
5+
result = []
6+
q = deque()
7+
8+
# 1. indegree= 0์ธ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…
9+
for i in range(1,n+1) :
10+
if indegree[i] == 0:
11+
q.append(i)
12+
13+
# 2. ํ๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง„ ๋ฐ˜๋ณต
14+
while q :
15+
# 2-1 ํ์—์„œ ์›์†Œ ๊บผ๋‚ด๊ธฐ
16+
now = q.popleft()
17+
result.append(now) # resut == queue ๊บผ๋‚ด๋Š” ์ˆœ์„œ
18+
# 2-2 ํ•ด๋‹น ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ (outdegree)๋“ค์˜ ์ง„์ž… ์ฐจ์ˆ˜์—์„œ 1 ๋นผ๊ธฐ
19+
for j in graph[now] :
20+
indegree[j] -=1
21+
#2-3. ์ƒˆ๋กญ๊ฒŒ indegree=0 ์ธ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…
22+
if indegree[j] == 0 :
23+
q.append(j)
24+
25+
# 3.์œ„์ƒ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
26+
for i in result :
27+
print(i,end = " ")
28+
29+
n, m = map(int, sys.stdin.readline().split())
30+
#graph ๋งŒ๋“ค๊ธฐ
31+
indegree = [0] * (n+1) # indegree list
32+
graph = [[] for _ in range(n+1)]
33+
for i in range(m):
34+
a,b = map(int , sys.stdin.readline().split())# a์•ž -> b๋’ค
35+
graph[a].append(b)
36+
indegree[b] += 1
37+
38+
39+
topology_sort()
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from collections import deque
2+
3+
def topology_sort(graph, inDegree):
4+
queue = deque()
5+
6+
result = [-1] * (N+1)
7+
8+
9+
# ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ ์ •์ ์„ queue์— ์ถ”๊ฐ€
10+
for i in range(1, N+1):
11+
if inDegree[i] == 0:
12+
queue.append(i)
13+
result[i] = 1
14+
15+
16+
while queue:
17+
now = queue.popleft()
18+
19+
for vertex in graph[now]:
20+
inDegree[vertex] -= 1
21+
if inDegree[vertex] == 0:
22+
queue.append(vertex)
23+
result[vertex] = result[now] + 1
24+
25+
return result
26+
27+
28+
29+
# ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
30+
N, M = map(int, input().split())
31+
32+
# ๊ณผ๋ชฉ ๊ฐœ์ˆ˜๋งŒํผ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
33+
graph = [ [] for _ in range(N+1)]
34+
35+
# ์ง„์ž…์ฐจ์ˆ˜ ๋ฆฌ์ŠคํŠธ
36+
inDegree = [0] * (N+1)
37+
result = [] * (N+1)
38+
39+
for i in range(M):
40+
A, B = map(int, input().split())
41+
graph[A].append(B)
42+
inDegree[B] += 1
43+
44+
result = topology_sort(graph, inDegree)
45+
for i in range(1,N+1):
46+
print(result[i], end=" ")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
T = int(input())
2+
result = []
3+
4+
for _ in range(T):
5+
# ์ถœ๋ฐœ์  ๋„์ฐฉ์ 
6+
x1, y1, x2, y2 = list(map(int, input().split()))
7+
# ํ–‰์„ฑ๊ณ„์˜ ๊ฐœ์ˆ˜
8+
n = int(input())
9+
count = 0
10+
for _ in range(n):
11+
cx, cy, cr = map(int, input().split())
12+
dis1 = (x1 - cx) ** 2 + (y1 - cy) ** 2
13+
dis2 = (x2 - cx) ** 2 + (y2 - cy) ** 2
14+
pow_cr = cr ** 2
15+
16+
if pow_cr > dis1 and pow_cr > dis2:
17+
pass
18+
elif pow_cr > dis1:
19+
count += 1
20+
elif pow_cr > dis2:
21+
count += 1
22+
result.append(count)
23+
24+
for i in result:
25+
print(i, end="\n")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
def calculate_count(n):
5+
left = 1 # ๊ฐ€์žฅ ์ ๊ฒŒ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋Š” ์ง•๊ฒ€๋‹ค๋ฆฌ ์ˆ˜๋Š” 1๊ฐœ (์ตœ์†Œ ๋ฒ”์œ„)
6+
right = n # ์ตœ๋Œ€ ๋ฒ”์œ„๋Š” N
7+
answer = 0
8+
9+
while left <= right:
10+
mid = (left + right) // 2
11+
# 1๋ถ€ํ„ฐ mid๊นŒ์ง€์˜ ํ•ฉ: sum = mid * (mid + 1) // 2
12+
if mid * (mid + 1) // 2 <= n: # ์ ํ”„ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์ด n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด
13+
left = mid + 1 # ๋” ํฐ ์ ํ”„ ์ˆ˜๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค (์ ํ”„ ์ˆ˜๋ฅผ ๋Š˜๋ ค๋ด„)
14+
answer = mid # ๊ฐ€๋Šฅํ•œ ์ ํ”„ ์ˆ˜๋ฅผ ์ €์žฅ
15+
else:
16+
right = mid - 1 # ํ•ฉ์ด ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด ์ ํ”„ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
17+
return answer
18+
19+
20+
t = int(input()) # ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜
21+
22+
for _ in range(t):
23+
n = int(input()) # ์ง•๊ฒ€๋‹ค๋ฆฌ์˜ ์ด ์ˆ˜
24+
print(calculate_count(n))
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
def solution(n, times):
2+
left = min(times)
3+
right = max(times) * n
4+
answer = right # ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ์ดˆ๊ธฐ๊ฐ’์„ right๋กœ ์„ค์ •
5+
6+
while left <= right:
7+
mid = (left + right) // 2
8+
completed = 0
9+
10+
# mid ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ
11+
for t in times:
12+
completed += mid // t
13+
14+
# ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
15+
if completed < n: # ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•จ
16+
left = mid + 1
17+
else: # complete >= n
18+
answer = mid # ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ธฐ๋ก
19+
right = mid - 1# ์‹œ๊ฐ„์„ ๋” ์ค„์—ฌ์„œ ํ™•์ธ
20+
return answer
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# ๋‚˜๋ฌด์˜ ์ˆ˜ N, ๊ฐ€์ ธ๊ฐˆ ๋‚˜๋ฌด์˜ ๊ธธ์ด M
5+
N, M = map(int, input().split())
6+
# ๋‚˜๋ฌด์˜ ๊ธธ์ด๋“ค ์ž…๋ ฅ
7+
trees = list(map(int, input().split()))
8+
9+
# ์‹œ์ž‘์ ๊ณผ ๋์  ์„ค์ •
10+
left = 0
11+
right = max(trees)
12+
answer = 0
13+
14+
while left <= right:
15+
total = 0
16+
mid = (left + right) // 2
17+
# mid ๋†’์ด๋กœ ๋‚˜๋ฌด๋ฅผ ์ž˜๋ผ์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด ๊ณ„์‚ฐ
18+
for tree in trees:
19+
# ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ๋” ํฌ๋‹ค๋ฉด
20+
if tree > mid:
21+
total += tree - mid
22+
# ์ž˜๋ฆฐ ๋‚˜๋ฌด์˜ ๊ธธ์ด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด ๋” ๋‚ฎ์€ ๋†’์ด(์™ผ์ชฝ ๋ถ€๋ถ„) ํƒ์ƒ‰
23+
if total < M:
24+
right = mid - 1
25+
# ๋‚˜๋ฌด ๊ธธ์ด๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด answer์— ์ €์žฅํ•˜๊ณ , ๋” ๋†’๊ฒŒ ์ž˜๋ผ(์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„) ํƒ์ƒ‰
26+
else:
27+
answer = mid
28+
left = mid + 1
29+
30+
# ์ตœ์ข… ์ ˆ๋‹จ๊ธฐ ๋†’์ด ์ถœ๋ ฅ
31+
print(answer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import sys
2+
sys.setrecursionlimit(10**6) # ์ตœ๋Œ€ ์žฌ๊ท€ํ•œ๋„ ๊นŠ์ด
3+
input = sys.stdin.readline
4+
5+
# DFS ํ•จ์ˆ˜
6+
def dfs(v):
7+
global order
8+
visited[v] = order # ๋ฐฉ๋ฌธํ•˜๋ฉด ์ˆœ์„œ ๋„ฃ๊ธฐ
9+
order += 1 # ๋‹ค์Œ ์ˆœ์„œ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ
10+
for u in sorted(graph[v]): # ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ธ์ ‘๋…ธ๋“œ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ ฌ
11+
if visited[u] == 0: # ๋ฐฉ๋ฌธ ์•ˆ ํ•œ ๋…ธ๋“œ๋ฉด dfsํƒ์ƒ‰
12+
dfs(u)
13+
14+
# ์ดˆ๊ธฐํ™”
15+
n, m, r = map(int, input().split()) # ์ •์ ์˜ ์ˆ˜ N, ๊ฐ„์„ ์˜ ์ˆ˜ M, ์‹œ์ž‘ ์ •์  R
16+
graph = [[] for _ in range(n+1)]
17+
visited = [0] * (n+1) # ๋ฐฉ๋ฌธ ์ˆœ์„œ ์ €์žฅ. 0์ด๋ฉด ๋ฐฉ๋ฌธ X
18+
order = 1 # ๋ฐฉ๋ฌธ ์ˆœ์„œ
19+
20+
# m๊ฐœ์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ๋ž˜ํ”„๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ
21+
for _ in range(m):
22+
u, v = map(int, input().split())
23+
graph[u].append(v)
24+
graph[v].append(u) # ์ด๊ฑฐ ์•ˆ ์”€
25+
26+
# DFS ํƒ์ƒ‰
27+
dfs(r) # ์‹œ์ž‘์ •์  r๋ถ€ํ„ฐ ํƒ์ƒ‰ ์‹œ์ž‘
28+
29+
# ํ•ด๋‹น๋…ธ๋“œ๋ฅผ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์ถœ๋ ฅ
30+
for i in range(1, n+1):
31+
print(visited[i])
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
# BFS ํƒ์ƒ‰ ํ•จ์ˆ˜
6+
def bfs(r):
7+
global order
8+
queue = deque([r]) # ํ
9+
visited[r] = order
10+
11+
while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
12+
u = queue.popleft()
13+
for v in sorted(graph[u]): # ์ •์  ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ
14+
if visited[v] == 0:
15+
order += 1 # ๋ฐฉ๋ฌธ ํ‘œ์‹œ ์—…๋ฐ์ดํŠธ
16+
visited[v] = order # ๋ฐฉ๋ฌธ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ
17+
queue.append(v)
18+
19+
20+
# ์ดˆ๊ธฐํ™”
21+
n, m, r = map(int, input().split()) # ์ •์ ์˜ ์ˆ˜ n, ๊ฐ„์„ ์˜ ์ˆ˜ m, ์‹œ์ž‘ ์ •์  r
22+
graph = [[] for _ in range(n+1)]
23+
visited = [0] * (n+1)
24+
order = 1
25+
26+
# ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ
27+
for _ in range(m):
28+
u, v = map(int, input().split())
29+
graph[u].append(v)
30+
graph[v].append(u)
31+
32+
# BFS ํƒ์ƒ‰
33+
bfs(r) # ์‹œ์ž‘์ •์ ๋ถ€ํ„ฐ ์‹œ์ž‘
34+
35+
# ํ•ด๋‹น๋…ธ๋“œ๋ฅผ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์ถœ๋ ฅ
36+
for i in range(1, n+1):
37+
print(visited[i])

0 commit comments

Comments
ย (0)