Skip to content

Commit 8b777b1

Browse files
authored
Merge pull request #77 from 24-Algorithm/minjeong
Minjeong / 11월 1주차 / 6문제
2 parents 4b8a2f2 + eeadc02 commit 8b777b1

6 files changed

+159
-0
lines changed
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)
Lines changed: 31 additions & 0 deletions
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])
Lines changed: 37 additions & 0 deletions
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])
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
mos = {'.-':'A', '-...': 'B', '-.-.':'C', '-..':'D', '.':'E', '..-.':'F', '--.':'G', '....':'H',
5+
'..':'I', '.---':'J', '-.-':'K', '.-..':'L', '--':'M', '-.':'N', '---':'O', '.--.':'P',
6+
'--.-': 'Q', '.-.': 'R', '...':'S', '-':'T', '..-':'U', '...-':'V', '.--':'W', '-..-': 'X',
7+
'-.--':'Y', '--..':'Z', '.----':'1', '..---':'2', '...--':'3', '....-':'4', '.....':'5',
8+
'-....':'6', '--...':'7', '---..':'8', '----.':'9', '-----':'0', '--..--':',', '.-.-.-':'.',
9+
'..--..':'?', '---...':':', '-....-':'-', '.--.-.':'@'
10+
}
11+
n = int(input()) # 길이
12+
signal = input().strip().split()
13+
message = ''
14+
for sign in signal:
15+
message += mos[sign]
16+
print(message)

0 commit comments

Comments
 (0)