Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dain Lee / 19주차 #99

Open
wants to merge 46 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
cd50617
[교재] 큰 수의 법칙 / 3장 / 10분
crolvlee Apr 8, 2024
7ecfff9
[교재] 숫자 카드 게임 / 3장 / 10분
crolvlee Apr 8, 2024
6c954be
[교재] 1이 될 때까지 / 3장 / 10분
crolvlee Apr 8, 2024
044bc43
[BOJ] 올림픽 / 4장 / 올림픽 / 실버5
crolvlee Apr 8, 2024
17fe6a4
[BOJ] 특정거리의도시찾기 / 5장 / 60분 / 실버2
crolvlee Apr 29, 2024
7457c67
[BOJ] 연산자끼워넣기 / 5장 / 40분 / 실버2
crolvlee Apr 29, 2024
dc37931
[BOJ] 국영수 / 6장 / 30분 / 실버4
crolvlee May 6, 2024
6615da0
[BOJ] 안테나 / 6장 / 40분 / 실버3
crolvlee May 6, 2024
2ec0850
[BOJ] 카드 정렬하기 / 6장 / 50분 / 골드4
crolvlee May 6, 2024
84064d9
[BOJ] 나무자르기 / 7장 / 30분 / 실버2
crolvlee May 13, 2024
c3edff0
[BOJ] 퇴사 / 8장 / 40분 / 실버3
crolvlee May 20, 2024
8084c52
[BOJ] 정수삼각형 / 8장 / 30분 / 실버1
crolvlee May 20, 2024
d1a8eb3
[BOJ] 최단경로 / 9장 / 1시간 / 골드4
crolvlee May 27, 2024
c7015b1
[BOJ] 플로이드 / 9장 / 1시간 / 골드4
crolvlee May 27, 2024
9be55f7
[BOJ] 지름길 / 10장 / 70분 / 실버1
crolvlee Jun 17, 2024
a0106f8
[BOJ] 연구소 / 10장 / 90분 / 골드4
crolvlee Jun 17, 2024
ecd894c
[BOJ] 행렬 / 60분 / 실버1
crolvlee Jun 24, 2024
090043c
[BOJ] 강의실 배정 / 3장 / 90분 / 골드5
crolvlee Jun 24, 2024
c3077a5
충돌 해결
crolvlee Jun 24, 2024
f78c010
Delete crolvlee_03 directory
crolvlee Jun 24, 2024
dd9ea66
Merge branch 'IT-Cotato:main' into main
crolvlee Jul 1, 2024
634b626
[BOJ] 단어공부 / 4장 / 15분 / 브론즈1
crolvlee Jul 1, 2024
fa054a6
Delete .idea directory
crolvlee Jul 1, 2024
a06f539
[BOJ] 덩치 / 4장 / 40분 / 실버5
crolvlee Jul 1, 2024
1b8b1da
[BOJ] 로봇청소기 / 4장 / 30분 / 골드5
crolvlee Jul 1, 2024
274c1b8
[BOJ] 유기농 배추 / 5장 / 80분 / 실버2
crolvlee Jul 10, 2024
e0bb9fc
[BOJ] 촌수 계산 / 5장 / 50분 / 실버2
crolvlee Jul 10, 2024
1dc90ea
[BOJ] 예산 / 7장 / 60분 / 실버2
crolvlee Jul 15, 2024
530e389
[BOJ] IF문 좀 대신 써줘 / 7장 / 60분 / 실버3
crolvlee Jul 15, 2024
5991954
[BOJ] 용액 / 7장 / 80분 / 골드 5
crolvlee Jul 15, 2024
65e3e6a
[BOJ] 예산 / 8장 / 20분 / 실버2
crolvlee Jul 18, 2024
1288fcb
[BOJ] 연속합 / 8장 / 30분 / 실버2
crolvlee Jul 22, 2024
59290aa
[BOJ] 알약 / 8장 / 70분 / 골드5
crolvlee Jul 22, 2024
9fe53b5
14주차 변경사항
crolvlee Jul 29, 2024
3b7cc53
[BOJ] 바이러스 / 9장 / 60분 / 실버3
crolvlee Jul 29, 2024
1a36862
[BOJ] 경로찾기 / 9장 / 60분 / 실버1
crolvlee Jul 29, 2024
261fdd7
[BOJ] 최소비용구하기 / 9장 / 70분 / 골드5
crolvlee Jul 29, 2024
743d8f4
Merge remote-tracking branch 'upstream/main'
crolvlee Jul 29, 2024
07d0465
머지 충돌 해결
crolvlee Jul 29, 2024
c117791
[BOJ] 결혼식 / 10장 / 30분 / 실버2
crolvlee Aug 5, 2024
fd7f53e
[BOJ] 회장뽑기 / 10장 / 40분 / 골드5
crolvlee Aug 5, 2024
b6e262d
[BOJ] 효율적인해킹 / 10장 / 30분 / 실버1
crolvlee Aug 5, 2024
93c542b
[BOJ] 쉬운 계단수 / 50분 / 실버1
crolvlee Aug 12, 2024
54dfdae
[BOJ] 안전영역 / 40분 / 실버1
crolvlee Aug 12, 2024
55664ca
[BOJ] 뒤집기 / 10분 / 실버5
crolvlee Aug 12, 2024
ff59150
[BOJ] 카드합체놀이 / 20분 / 실버1
crolvlee Aug 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions crolvlee/chap07/2512_예산.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

N = int(input())
lst = list(map(int, sys.stdin.readline().split()))
M = int(input()) # 예산 상한선
M = int(input()) # 빌려줄 수 있는 총액

start = 0
end = max(lst)
Expand All @@ -14,16 +14,16 @@
# 상한 금액이 mid일 때, 받는 요청 금액의 합 total 구하기
total = 0
for l in lst:
if l >= mid:
if l >= mid: # 상한금액 mid를 넘으면
total += mid
else:
else: # 상한 금액 mid를 넘지 않으면
total += l

# total이 주어진 금액을 초과하는지 여부에 따라 포인트 재설정
if total <= M:
answer = mid # 현재 mid값이 가능하긴 함
start = mid + 1 # 현재 mid값보다는 작은 범위를 탐색
start = mid + 1 # 현재 mid값보다는 범위를 탐색
else:
end = mid - 1 # 현재 mid값보다는 범위를 탐색
end = mid - 1 # 현재 mid값보다는 작은 범위를 탐색

print(answer)
18 changes: 18 additions & 0 deletions crolvlee/chap09/11403_경로찾기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# 입력
N = int(input())
graph = []
for _ in range(N):
graph.append(list(map(int, input().split())))

# 플로이드 알고리즘
for k in range(N):
for i in range(N):
for j in range(N):
if graph[i][j] == 1 or (graph[i][k] == 1 and graph[k][j] == 1):
graph[i][j] = 1

# 출력
for row in graph:
for col in row:
print(col, end=" ")
print()
57 changes: 57 additions & 0 deletions crolvlee/chap09/1916_최소비용구하기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import sys
import heapq

input = sys.stdin.readline
INF = int(1e9)

N = int(input()) # 도시의 개수
M = int(input()) # 버스의 개수

# 각 도시에 연결되어 있는 도시에 대한 정보를 담는 이차원 리스트
graph = [[] for i in range(N + 1)]
# graph = [
# []
# [(2, 2), (3, 3), (4, 1), (5, 10)]
# [(4, 2)]
# ]

# 방문한적이 있는 도시를 체크하기 위한 리스트
visited = [False] * (N + 1)

# 최단 거리 테이블 -> 무한대로 초기화
distance = [INF] * (N + 1)

# graph에 정보 채우기
for _ in range(M):
u, v, w = map(int, input().split())
graph[u].append((v, w))

# 출발점의 도시번호와 도착점의 도시번호
start, end = map(int, input().split())

# 다익스트라 함수
def dijkstra(start):
q = []
heapq.heappush(q, (0, start)) # 큐에 (비용, 도시번호)가 들어감
distance[start] = 0 # 최단거리 테이블 시작노드는 0으로

while q:
# 가장 최단거리가 짧은 도시에 대한 정보 꺼내기
curCost, curNode = heapq.heappop(q)

# 테이블에 있는 값보다 큐에 있는 비용이 크다면, 이미 방문한 노드임
if distance[curNode] < curCost:
continue

# 현재 노드와 연결된 다른 인접한 노드들을 확인
for i in graph[curNode]:
cost = curCost + i[1]
# 현재 노드를 거쳐서 다른 노드로 이동하는 거리가 더 짧은 경우
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))

# 다익스트라 알고리즘 수행
dijkstra(start)

print(distance[end])
30 changes: 30 additions & 0 deletions crolvlee/chap09/2606_바이러스.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 1번 컴퓨터를 출발 노드로 설정

# 특정 컴퓨터와 연결되어 있는 컴퓨터에 방문하지 않았다면 그 컴퓨터의 번호를 매개변수로 전달하면서 재귀호출
# 함수가 호출되는 수 == 감염된 컴퓨터의 수



N = int(input()) # 컴퓨터의 개수
M = int(input()) # 연결된 컴퓨터 쌍의 개수

def dfs(graph, v, visited):
global cnt
visited[v] = True # 방문했으니 True로 바꿔줌
for i in graph[v]:
if visited[i] == False:
cnt += 1
dfs(graph, i, visited)

graph = [[] for _ in range(N+1)]
visited = [False] * (N+1)
cnt = 0 # 함수가 호출되는 수 (감염된 컴퓨터의 수)

# 그래프에 연결된 컴퓨터들 채워넣기
for i in range(M):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)

dfs(graph, 1, visited)
print(cnt)
44 changes: 44 additions & 0 deletions crolvlee/chap10/1325_효율적인해킹.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import sys
input = sys.stdin.readline

def dfs(node, graph, visited):
stack = [node]
count = 0

while stack:
current = stack.pop()
if not visited[current]:
visited[current] = True
count += 1
for neighbor in graph[current]:
if not visited[neighbor]:
stack.append(neighbor)

return count


# 입력 받음
n, m = map(int, input().split())

# 그래프 초기화
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[b].append(A)

# 각 컴퓨터에서 해킹할 수 있는 컴퓨터 수를 계산
max_hack_count = 0
result = []

for i in range(1, n + 1):
visited = [False] * (n + 1)
hack_count = dfs(i, graph, visited)
if hack_count > max_hack_count:
max_hack_count = hack_count
result = [i]
elif hack_count == max_hack_count:
result.append(i)

# 결과 출력
result.sort()
print(' '.join(map(str, result)))
45 changes: 45 additions & 0 deletions crolvlee/chap10/2660_회장뽑기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import sys
input = sys.stdin.readline
INF = float('inf')

# 입력받음
n = int(input())

# 그래프 초기화
dist = [[INF] * (n+1) for _ in range(n+1)]
for i in range(1, n+1):
dist[i][i] = 0

# 연결된 노드들을 그래프에 담음
while True:
a, b = map(int, input().split())
if a == -1 and b == -1:
break
dist[a][b] = 1
dist[b][a] = 1

# 플로이드 알고리즘
for k in range(1, n+1):
for i in range(1, n+1):
for j in range(1, n+1):
if dist[i][j] > dist[i][k] + dist[k][j]:
dist[i][j] = dist[i][k] + dist[k][j]

# 각 회원의 점수 계산
scores = []
for i in range(1, n+1):
max_distance = max(dist[i][1:])
scores.append((max_distance, i))

min_score = min(scores)[0]
candidates = []
for score, member in scores:
if score == min_score:
candidates.append(member)

# 후보의 회원번호를 오름차순으로 정렬
candidates.sort()

print(min_score, len(candidates))
for candidate in candidates:
print(candidate, end=' ')
36 changes: 36 additions & 0 deletions crolvlee/chap10/5567_결혼식.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 1번 노드부터 탐색

# dfs함수
def dfs(graph, current, visited, depth):
if depth > 2: # 친구의 친구까지만 초대할 거니까
return

visited[current] = True # 현재 노드를 방문 처리

for neighbor in graph[current]:
if not visited[neighbor]:
dfs(graph, neighbor, visited, depth+1)


# 입력 받음
n = int(input()) # 동기의 수
m = int(input()) # 리스트의 길이

# 각 노드가 연결된 정보
graph = [[] for _ in range(n+1)]

# 각 노드가 방문된 정보를 리스트로 표현
visited = [False] * (n+1)

# graph에 연결된 정보 담음
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)


# dfs 수행
dfs(graph, 1, visited, 0)

invite_count = visited.count(True) - 1 # 1번 노드(본인) 제외하고 카운트
print(invite_count)
30 changes: 30 additions & 0 deletions crolvlee/other/10844_쉬운계단수.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 길이가 i이고, j로 끝나는 계단수의 개수 (j = 1, 2, 3, ... 7, 8)
# = (길이가 i-1이고, j-1로 끝나는 계단수의 개수) + (길이가 i-1이고 j+1로 끝나는 계단수의 개수

# 길이가 i이고, 0으로 끝나는 계단수의 개수
# = 길이가 (i-1)이고, 1로 끝나는 계단수의 개수

# 길이가 i이고, 9로 끝나는 계단수의 개수
# = 길이가 (i-1)이고 8로 끝나는 계단수의 개수

N = int(input())

# dp[i][j] : 길이가 i이고 j로 끝나는 계단수의 개수
dp = [[0] * 10 for _ in range(N+1)]

# 길이가 1인 계단수의 개수 초기화
for j in range(1, 10):
dp[1][j] = 1

# dp 채우기
for i in range(2, N+1):
for j in range(10):
if j == 0:
dp[i][j] = dp[i-1][1]
elif j == 9:
dp[i][j] = dp[i-1][8]
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]


print(sum(dp[N]) % 1000000000)
8 changes: 8 additions & 0 deletions crolvlee/other/1439_뒤집기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
S = input()

cnt = 0
for i in range(len(S) - 1):
if S[i] != S[i+1]:
cnt += 1

print((cnt+1) // 2)
13 changes: 13 additions & 0 deletions crolvlee/other/15903_카드합체놀이.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import sys
input = sys.stdin.readline

a,b = map(int, input().split())
card = list(map(int,input().split()))

for i in range(b):
card = sorted(card)
cover = card[0] + card[1]
card[0] = cover
card[1] = cover

print(sum(card))
43 changes: 43 additions & 0 deletions crolvlee/other/2468_안전영역.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from collections import deque

# BFS 함수 정의
def bfs(x, y, height, visited, graph):
# 이동 방향 (상, 하, 좌, 우)
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]

queue = deque([(x, y)])
visited[x][y] = True

while queue:
cx, cy = queue.popleft()

for dx, dy in directions:
nx, ny = cx + dx, cy + dy

if 0 <= nx < N and 0 <= ny < N and not visited[nx][ny] and graph[nx][ny] > height:
visited[nx][ny] = True
queue.append((nx, ny))


N = int(input())
graph = []
for _ in range(N):
graph.append(list(map(int, input().split())))

# 최대 안전 영역 개수
result = 0

# 강수량을 0부터 100까지 변화시키며 안전영역을 계산
for height in range(101):
visited = [[False] * N for _ in range(N)]
safe_areas = 0

for i in range(N):
for j in range(N):
if graph[i][j] > height and visited[i][j] == False:
bfs(i, j, height, visited, graph)
safe_areas += 1

result = max(result, safe_areas)

print(result)