Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions 4주차/16198/16198_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from collections import deque

n = int(input())
inputLst = deque(list(map(int, input().split())))

checkScore = 0
answer = 0
def dfs(lst):
global checkScore, answer
# 양끝단만 남았을 때 계산하지 않음
if len(lst) == 2:
return
for i in range(1, len(lst) - 1):
findNum = lst[i]
score = lst[i - 1] * lst[i + 1]
checkScore += score
# 계산한 점수 중 가장 큰 값
answer = max(answer, checkScore)
# 1개씩 빼며 dfs
del lst[i]
dfs(lst)
# 원상복구
checkScore -= score
lst.insert(i, findNum)

dfs(inputLst)
print(answer)
32 changes: 32 additions & 0 deletions 4주차/18232/18232_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import sys
from collections import deque

input = sys.stdin.readline
n, m = map(int, input().split())
s, e = map(int, input().split())
db = [[] for _ in range(n+1)]
visited = [False for _ in range(n+1)]
for _ in range(m):
x, y = map(int, input().split())
db[x].append(y)
db[y].append(x)

def bfs(start):
q = deque()
q.append((start, 0))
while q:
# 현재위치, 시간
x, hop = q.popleft()
# 검증
if x == e:
return hop
if 1 <= x <= n:
if not visited[x]:
visited[x] = True
q.append((x-1, hop+1))
q.append((x+1, hop+1))
if len(db[x]) > 0:
for y in db[x]:
q.append((y, hop+1))

print(bfs(s))
38 changes: 38 additions & 0 deletions 4주차/21938/21938_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import sys
from collections import deque
input = sys.stdin.readline

n, m = map(int, input().split())
lst = []
# rgb 평균값으로 저장
for _ in range(n):
tempLst = list(map(int, input().split()))
rgbLst = []
for i in range(0, m*3, 3):
rgbLst.append(sum(tempLst[i:i+3])/3)
lst.append(rgbLst)
t = int(input())

dx = [0, 0, 1, -1]
dy = [-1, 1, 0, 0]
def bfs(i, j):
q = deque()
q.append((i, j))
while q:
new_i, new_j = q.popleft()
for index in range(4):
ni = dx[index] + new_i
nj = dy[index] + new_j
if not (0 <= ni < n and 0 <= nj < m):
continue
if lst[ni][nj] >= t:
q.append((ni, nj))
lst[ni][nj] = -1
count = 0
for i in range(n):
for j in range(m):
if lst[i][j] >= t:
count += 1
lst[i][j] = -1
bfs(i, j)
print(count)
14 changes: 14 additions & 0 deletions 5주차/11582/11582_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import sys
input = sys.stdin.readline

n = int(input())
lst = list(map(int, input().split()))
k = int(input())

# 한번에 정렬할 개수
hop = n//k
answer = []
for i in range(0, len(lst), hop):
answer += sorted(lst[i:i+hop])

print(*answer)
2 changes: 2 additions & 0 deletions 5주차/11582/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 치킨 TOP N
https://www.acmicpc.net/problem/11582
31 changes: 31 additions & 0 deletions 5주차/16432/16432_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import copy
import sys

input = sys.stdin.readline


def dfs(i, cakes, prevCake):
# 완료 시점
if i == n:
for temp in cakes:
print(temp)
exit(0)
# dfs
for cake in lst[i]:
# 방문한 적 없고, 이전 떡과 다를때
if not visited[i+1][cake] and cake != prevCake:
visited[i+1][cake] = True
new_cakes = copy.deepcopy(cakes)
new_cakes.append(cake)
dfs(i + 1, new_cakes, cake)


n = int(input())
# 떡 정보
lst = []
for _ in range(n):
lst.append(list(map(int, input().split()))[1:])
# [n번째날][떡 종류]
visited = [[False for _ in range(11)] for i in range(n + 1)]
dfs(0, [], 0) # i번째날, 떡 넣는 리스트, 전날 먹은 떡
print(-1)
2 changes: 2 additions & 0 deletions 5주차/16432/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
##
https://www.acmicpc.net/problem/16432
23 changes: 23 additions & 0 deletions 5주차/20922/20922_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import sys
from collections import defaultdict, deque
input = sys.stdin.readline

n, k = map(int, input().split())
lst = list(map(int, input().split()))

db = defaultdict(int)
q = deque()
dp = [0] * (n+1)
answer = 0
for index, value in enumerate(lst):
q.append(value)
db[value] += 1
if (k+1) == db[value]:
# 현재 위치가 마지막인 최장 연속 부분 수열로 맞춘다
while True:
pop = q.popleft()
db[pop] -= 1
if pop == value:
break
dp[index] = len(q)
print(max(dp))
2 changes: 2 additions & 0 deletions 5주차/20922/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 겹치는 건 싫어
https://www.acmicpc.net/problem/20922
26 changes: 26 additions & 0 deletions 5주차/5107/5107_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import sys
from collections import defaultdict
input = sys.stdin.readline

index = 1
while True:
n = int(input())
# 종료 설정
if n == 0:
exit(0)
print(index, end=' ')
index += 1
lst = defaultdict(bool)

# 로직시작
count = 0
# n개 입력받기
for _ in range(n):
a, b = map(str, input().split())
# 둘다 True면 count 증가
if lst[a] == True and lst[b] == True:
count += 1
else:
lst[a] = True
lst[b] = True
print(count)
2 changes: 2 additions & 0 deletions 5주차/5107/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
##
https://www.acmicpc.net/problem/5107
53 changes: 53 additions & 0 deletions 5주차/5904/5904_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# moomooomoomoooomoomooomoo
# 01234567890123456789012345
# 0 3 7 10 15 18 22 25

import sys
from bisect import bisect_left
from collections import deque
input = sys.stdin.readline

limit = 10**9

# 초기 수열 개수 설정
# 3, 10, 25...
lst = deque([3])
adder = 3
while True:
adder = adder*2+1
lst.append(lst[-1]+adder)
if lst[-1] > limit:
break


n = int(input()) # 11
k = bisect_left(lst, n) # 2
n -= 1 # 10 (0부터 시작)
# 분할정복
def fun(k, n): # 2, 11
# 종료조건
if n in lst:
print("m")
return
if k == 0:
if n==0:
print("m")
else:
print("o")
return
# 중간 부분 체크(반복X)
first_limit = (lst[k] - k - 3) / 2 # 10
second_limit = first_limit + k + 2 # 14
if first_limit <= n <= second_limit:
if n==first_limit:
print("m")
else:
print("o")
return
# 분할 부분
if n < first_limit:
fun(k-1, n)
elif n > second_limit:
fun(k-1, n-second_limit-1)

fun(k, n)
2 changes: 2 additions & 0 deletions 5주차/5904/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## Moo
https://www.acmicpc.net/problem/5904
22 changes: 22 additions & 0 deletions 5주차/6198/6198_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
lst = []
for i in range(n):
lst.append(int(input()))

q = deque([lst[0]])
answer = 0
for i in range(1, n):
# 1. 현재 지정된 lst[i]보다 작은 값을 q에서 제거
while q:
if q[-1] > lst[i]:
break
q.pop()
# 2. 저장
q.append(lst[i])
answer += (len(q) - 1)
print(answer)
2 changes: 2 additions & 0 deletions 5주차/6198/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 옥상 정원 꾸미기
https://www.acmicpc.net/problem/6198
54 changes: 54 additions & 0 deletions 6주차/14657/14657_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import sys, math
from collections import defaultdict, deque

input = sys.stdin.readline


def bfs(start):
global hour, end_point

q = deque([(start, 1, 0)]) # 시작위치, 지난개수, 시간
visited = [False] * (n + 1)
visited[0] = True
visited[start] = True
checkLst = []

while q:
s, count, h = q.popleft()
checkCount = count
for e in lst[s]:
if visited[e]:
continue
visited[e] = True
checkCount = count + 1
q.append((e, count + 1, h + distance[(s, e)]))
if (False not in visited) and checkCount == count:
if hour > h:
end_point = s
hour = h
checkLst.append((count, h))
return checkLst


# 입력
n, t = map(int, input().split())
# 갈 수 있는 방향정보
lst = defaultdict(list)

# 거리
distance = defaultdict(int)
for _ in range(n - 1):
a, b, c = map(int, input().split())
lst[a].append(b)
lst[b].append(a)
distance[(a, b)] = c
distance[(b, a)] = c

end_point = 0
hour = 1e9
bfs(1)
hour = 1e9
checkLst = bfs(end_point)
temp = sorted(checkLst, key=lambda x: (-x[0], x[1]))
hour = temp[0][1]
print(math.ceil(hour / t))
2 changes: 2 additions & 0 deletions 6주차/14657/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 준오는 최종인재야!!
https://www.acmicpc.net/problem/14657
39 changes: 39 additions & 0 deletions 6주차/14938/14938_python_제로.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import heapq, sys
from collections import defaultdict

input = sys.stdin.readline


def dijstra(start):
distance = [1e9] * (n + 1)
distance[start] = 0
q = []
heapq.heappush(q, (0, start))
while q:
d, now = heapq.heappop(q)
if d > distance[now]:
continue
for next_d, next_now in graph[now]:
if distance[next_now] > d + next_d:
distance[next_now] = d + next_d
heapq.heappush(q, (d + next_d, next_now))
return distance


n, m, r = map(int, input().split())
lst = list(map(int, input().split()))
graph = defaultdict(list)
for _ in range(r):
start, end, dist = map(int, input().split())
graph[start].append((dist, end))
graph[end].append((dist, start))

answer = 0
for i in range(1, n+1):
count = 0
checkDijstra = dijstra(i)[1:]
for i in range(len(checkDijstra)):
if checkDijstra[i] <= m:
count+=lst[i]
answer = max(answer, count)
print(answer)
2 changes: 2 additions & 0 deletions 6주차/14938/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 서강그라운드
https://www.acmicpc.net/problem/14938
Loading