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
30 changes: 30 additions & 0 deletions week-29/장승이/14712.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 14712 넴모넴모
# 실버 1

# 모든 맵 탐색하면서 넴모가 생기는 경우 빼주기

n, m = map(int, input().split())

graph = [[0] * (m + 1) for _ in range(n + 1)]
ans = 0

def dfs(cnt):
global ans

if cnt == n * m:
ans += 1
return

# 행은 몫으로 열은 나머지연산으로 구함
# (1, 1) ~ (n, m)
x = cnt // m + 1 # 행
y = cnt % m + 1 # 열

dfs(cnt + 1)
if graph[x - 1][y] == 0 or graph[x][y - 1] == 0 or graph[x - 1][y - 1] == 0:
graph[x][y] = 1
dfs(cnt + 1)
graph[x][y] = 0

dfs(0)
print(ans)
22 changes: 22 additions & 0 deletions week-29/장승이/1535.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# 1535 안녕
# 실버 2

# 냅색 알고리즘

import sys
input = sys.stdin.readline


N = int(input())
L = [0] + list(map(int, input().split())) # Lost
P = [0] + list(map(int, input().split())) # Pleasure
dp = [[0] * 101 for _ in range(N + 1)]

for i in range(1, N+1):
for j in range(1, 101): # 체력은 1 ~ 100
if L[i] <= j:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-L[i]] + P[i])
else:
dp[i][j] = dp[i-1][j]

print(dp[N][99])
14 changes: 14 additions & 0 deletions week-29/장승이/1699.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# 1699 제곱수의 합
# 실버 2

n = int(input())

d = [i for i in range(n + 1)]

for i in range(1, n + 1):
for j in range(1, i):
if j**2 > i:
break
d[i] = min(d[i], d[i - j**2] + 1)

print(d[n])
12 changes: 12 additions & 0 deletions week-29/장승이/22233.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# 22232 가희와 키워드
# 실버 2

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
keywords = set([input().strip() for _ in range(n)])

for _ in range(m):
keywords -= set(list(input().strip().split(",")))
print(len(keywords))
17 changes: 17 additions & 0 deletions week-29/장승이/2565.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 2565 전깃줄
# 골드 5

import sys

input = sys.stdin.readline

n = int(input())
data = sorted(list(map(int, input().split())) for _ in range(n))

d = [1] * n
for i in range(n):
for j in range(i):
if data[i][1] > data[j][1]:
d[i] = max(d[i], d[j] + 1)

print(n - max(d))
52 changes: 52 additions & 0 deletions week-29/장승이/9333.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# 9333 돈 갚기
# 실버 1

import sys
input = sys.stdin.readline

n = int(input())

for _ in range(n):
r, b, m = map(float, input().split())

count = 0

while b > 0:
count += 1
if count > 1200:
count = -1
break

b += (b * r) / 100
b = round(b, 8)
if (b * 1000) % 10 == 5:
b += 0.001
b = round(b, 2)
b -= m

print("impossible" if count == -1 else count)

# def my_round(number):
# number = round(round(number, 8), 3)

# check = (number * 1000) % 100

# if check >= 50:
# return round(number + 0.001, 2)
# else:
# return round(number, 2)

# for _ in range(n):
# r, b, m = map(float, input().split())
# count = 0

# while b > 0:
# if count > 1200:
# count = -1
# break

# interest = my_round(b * (r / 100))
# b = round(round(b + interest - m, 8), 2)
# count += 1

# print("impossible" if count == -1 else count)
19 changes: 19 additions & 0 deletions week-30/장승이/10974.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# 10974 모든 순열
# 실버 3

n = int(input())
ans = []
def bt(depth):
if depth == n:
for i in range(n):
print(ans[i], end = ' ')
print()
return

for i in range(1, n + 1):
if i not in ans:
ans.append(i)
bt(depth + 1)
ans.remove(i)

bt(0)
28 changes: 28 additions & 0 deletions week-30/장승이/2961.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 2961 도영이가 만든 맛있는 음식
# 실버 2

import sys
input = sys.stdin.readline

n = int(input())
foods = [list(map(int, input().split(" "))) for _ in range(n)]
ans = []
temp_idx = []

def bt(num, depth):
if depth == n:
return
for i in range(num, n):
temp_idx.append(i)
mult = 1
add = 0
print(temp_idx)
for j in temp_idx:
mult *= foods[j][0]
add += foods[j][1]
ans.append(abs(mult-add))
bt(i + 1, depth + 1)
temp_idx.remove(i)

bt(0, 0)
print(min(ans))
25 changes: 25 additions & 0 deletions week-30/장승이/5568.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 5568 카드 놓기
# 실버 4

n = int(input())
k = int(input())
cards = [int(input()) for _ in range(n)]
temp = []
ans = set()

def bt(depth):
if depth == k:
new_num = ""
for i in range(k):
new_num += str(cards[temp[i]])
ans.add(int(new_num))
return

for i in range(n):
if i not in temp:
temp.append(i)
bt(depth + 1)
temp.remove(i)

bt(0)
print(len(ans))
53 changes: 53 additions & 0 deletions week-32/장승이/16235.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 16235 나무 재테크

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

dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]

N, M, K = map(int, input().split())
arr = [[5]*N for _ in range(N)]
s2d2 = []
tree = [[deque() for _ in range(N)] for _ in range(N)]
for _ in range(N):
s2d2.append(list(map(int, input().split())))
for _ in range(M):
x, y, z = map(int, input().split())
tree[x-1][y-1].append(z)

while K > 0:
# 봄
for i in range(N):
for j in range(N):
t_len = len(tree[i][j])
for k in range(t_len):
if arr[i][j] >= tree[i][j][k]:
arr[i][j] -= tree[i][j][k]
tree[i][j][k] += 1
else:
# 여름
for _ in range(k, t_len):
arr[i][j] += tree[i][j].pop() // 2
break

# 가을
for i in range(N):
for j in range(N):
for z in tree[i][j]:
if z % 5 == 0:
for l in range(8):
nx = i + dx[l]
ny = j + dy[l]
if 0 <= nx < N and 0 <= ny < N:
tree[nx][ny].appendleft(1)
#겨울
arr[i][j] += s2d2[i][j]
K -= 1

result = 0
for i in range(N):
for j in range(N):
result += len(tree[i][j])
print(result)
39 changes: 39 additions & 0 deletions week-32/장승이/17070.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 17070 파이프 옮기기1
# 골드5

import sys
input = sys.stdin.readline

n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
visited = [[False] * n for _ in range(n)]

ans = 0

def dfs(x, y, code): # code = 0:가로 1:세로 2:대각선
global ans
if x == n - 1 and y == n - 1:
ans += 1
return

if code == 0 or code == 2:
ny = y + 1
if ny < n and graph[x][ny] == 0:
dfs(x, ny, 0)
if code == 1 or code == 2:
nx = x + 1
if nx < n and graph[nx][y] == 0:
dfs(nx, y, 1)

nx = x + 1
ny = y + 1
if nx < n and ny < n and graph[nx][ny] == 0 and graph[nx - 1][ny] == 0 and graph[nx][ny - 1] == 0:
dfs(nx, ny, 2)


if graph[n-1][n-1] == 1:
print(0)
else:
dfs(0, 1, 0)
print(ans)

32 changes: 32 additions & 0 deletions week-32/장승이/17396.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 17369 백도어
# 골드 5

import sys
import heapq
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [[] for _ in range(n)]
distance = [10000000001] * n
view = list(map(int, input().split()))

for _ in range(m):
a, b, c = map(int, input().split())
graph[a].append((b, c))
graph[b].append((a, c))

q = []
distance[0] = 0
heapq.heappush(q, (0, 0)) # dist, cost
while q:
now, dist = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
if view[i[0]] != 1 or (view[i[0]] and i[0] == n - 1):
heapq.heappush(q, (i[0], cost))

print(distance[n - 1] if distance[n - 1] != 10000000001 else -1)
Loading