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
14 changes: 14 additions & 0 deletions week2/dynamic_programming/1,2,3더하기/9095_nohse
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import sys
input=sys.stdin.readline

t=int(input())
arr=[0]*12
arr[1]=1
arr[2]=2
arr[3]=4
arr[4]=7
for i in range(5, 12):
arr[i]=arr[i-1]+arr[i-2]+arr[i-3]
for j in range(t):
a=int(input())
print(arr[a])
15 changes: 15 additions & 0 deletions week2/dynamic_programming/Four_Squares/17626_nohse
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import sys
from collections import deque
input=sys.stdin.readline

n=int(input())
dp=[0]*50005
for i in range(1,n+1):
dp[i]=dp[i-1]+1
j=2
while(j*j<=i):
dp[i] = min(dp[i],dp[i-j*j]+1)
j+=1

print(dp[n])

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import sys
input= sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))

d = [1] * n

for i in range(1, n):
for j in range(i):
if arr[j] < arr[i]:
d[i] = max(d[i], d[j] + 1)

print(max(d))
8 changes: 8 additions & 0 deletions week2/dynamic_programming/돌게임/9655_nohse
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import sys
input=sys.stdin.readline

n=int(input())
if n%2==1:
print("SK")
else:
print("CY")
20 changes: 20 additions & 0 deletions week3/backtracking/N과M_10/15664_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int, input().split())
arr=list(map(int, input().split()))
arr.sort()
que=deque()
def back(start):
if len(que)==m:
for i in range(m):
print(que[i], end=" ")
print()
return
for j in range(start, n):
if j > start and arr[j] == arr[j - 1]:
continue
que.append(arr[j])
back(j+1)
que.pop()
back(0)
22 changes: 22 additions & 0 deletions week3/backtracking/N과M_11/15665_nohse.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,m=map(int, input().split())
arr=list(map(int,input().split()))
arr.sort()

que=deque()
result=set()
def back():
if len(que)==m:
result.add(tuple(que))
return

for j in range(n):
que.append(arr[j])
back()
que.pop()
back()
for seq in sorted(result): # 튜플들을 정렬해서 순서대로 출력
print(*seq)
16 changes: 16 additions & 0 deletions week3/backtracking/N과M_3/15651_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import sys
input=sys.stdin.readline
n, m=map(int, input().split())
arr=list(range(1,n+1))
answer=[0]*m
def back(k):
if k==m:
for i in range(m):
print(answer[i], end=' ')
print()
return
for i in range(0, n):
answer[k]=arr[i]
back(k+1)

back(0)
21 changes: 21 additions & 0 deletions week3/backtracking/N과M_4/15652_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
arr=[0]*m
def back(arr, k):
global m, n
if k==m:
for i in range(m):
print(arr[i], end=" ")
print()
return

for i in range(1, n+1):
if k==0:
arr[0]=i
back(arr, k+1)
else:
if arr[k-1]<=i:
arr[k]=i
back(arr,k+1)
back(arr,0)
20 changes: 20 additions & 0 deletions week3/backtracking/N과M_5/15654_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int, input().split())
arr=list(map(int, input().split()))
arr.sort()
que=deque()
def reverse():
if len(que)==m:
for j in range(m):
print(que[j], end=" ")
print()
return
for i in range(n):
if arr[i] not in que:
que.append(arr[i])
reverse()
que.pop()

reverse()
19 changes: 19 additions & 0 deletions week3/backtracking/N과M_6/15655_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import sys
from collections import deque
input=sys.stdin.readline
n, m= map(int,input().split())
arr=list(map(int, input().split()))
arr.sort()
que=deque()
def back(start):
if len(que)==m:
for i in range (m):
print(que[i], end=" ")
print()
return
for j in range(start, len(arr)):
if not arr[j] in que:
que.append(arr[j])
back(j+1)
que.pop()
back(0)
18 changes: 18 additions & 0 deletions week3/backtracking/N과M_7/15656_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int, input().split())
arr=list(map(int, input().split()))
arr.sort()
que=deque()
def back():
if len(que)==m:
for i in range(m):
print(que[i], end=" ")
print()
return
for j in range(0, n):
que.append(arr[j])
back()
que.pop()
back()
19 changes: 19 additions & 0 deletions week3/backtracking/N과M_8/15657_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import sys
from collections import deque
input=sys.stdin.readline

n,m=map(int, input().split())
arr=list(map(int,input().split()))
arr.sort()
que=deque()
def back(start):
if len(que)==m:
for i in range(m):
print(que[i], end=" ")
print()
return
for j in range(start, n):
que.append(arr[j])
back(j)
que.pop()
back(0)
35 changes: 35 additions & 0 deletions week4/ABCDE
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import sys
input = sys.stdin.readline

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

friend = [[] for _ in range(n)]
visited=[False for _ in range(n)]

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

def dfs(now,depth):
global ans
if depth == 4:
ans=True
return

for x in friend[now]:
if not visited[x]:
visited[x] = True
dfs(x,depth + 1)
visited[x] = False

for i in range(n):
visited[i] = True
dfs(i,0)
visited[i] = False
if ans:
break

if ans: print(1)
else: print(0)
36 changes: 36 additions & 0 deletions week4/graph_traversal/DFS와_BFS/1260_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import sys
from collections import deque
input=sys.stdin.readline
n, m, v=map(int, input().split())
visited=[False]*(n+1)
edge=[[] for i in range(n+1)]
for i in range(m):
a,b=map(int,input().split())
edge[a].append(b)
edge[b].append(a)
def DFS(v):
if visited[v]==False:
visited[v]=True
print(v,end=" ")
for j in edge[v]:
if visited[j]==False:
DFS(j)
def BFS(v):
que=deque()
que.append(v)
while que:
a=que.popleft()
if visited[a]==False:
visited[a]=True
print(a,end=" ")
for j in edge[a]:
if visited[j]==False:
que.append(j)


for i in edge:
i.sort()
DFS(v)
print()
visited=[False]*(n+1)
BFS(v)
35 changes: 35 additions & 0 deletions week4/graph_traversal/공주님을구해라!/17836_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import sys
from collections import deque
input = sys.stdin.readline
N, M, T = map(int,input().split())
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
m = [list(map(int,input().split())) for _ in range(N)]
q = deque()
visited = [[0] * M for _ in range(N)]

def bfs():
gram = 10001
q.append((0, 0))
visited[0][0] = 1
while q:
x, y = q.popleft()
# 공주님이 있는 곳에 도착했을 때
if (x, y) == (N-1, M-1):
return min(visited[x][y]-1, gram)
# 그람이 있는 곳에 도착했을 때
if m[x][y] == 2:
gram = visited[x][y]-1 + N-1-x + M-1-y

for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < N and 0 <= ny < M and not visited[nx][ny]:
if m[nx][ny] == 0 or m[nx][ny] == 2:
visited[nx][ny] = visited[x][y] + 1
q.append((nx, ny))
return gram

res = bfs()
if res > T:
print('Fail')
else:
print(res)
46 changes: 46 additions & 0 deletions week4/graph_traversal/단지번호붙이기/2667_nohse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import sys
from collections import deque

input=sys.stdin.readline
n=int(input())
arr=[]
visited=[[0] *(n) for _ in range(n)]
result = [0] * (n * n + 1)
num=0
for i in range(n):
row=list(map(int, input().strip()))
arr.append(row)
que=deque()
def dfs(k, l):
dx=[0,0,1,-1]
dy=[1,-1,0,0]
global num
global visited
global arr
global que
num+=1
que.append((k, l))
visited[k][l]=1
result[num]+=1
while que:
x,y= que.popleft()
for v in range(4):
nx, ny = x + dx[v], y + dy[v]
if 0 <= nx < n and 0 <= ny < n:
if arr[nx][ny] == 1 and visited[nx][ny] == 0:
que.append((nx, ny))
visited[nx][ny] = 1
result[num] += 1


for k in range(0, n):
for l in range(0, n):
if visited[k][l]==0 and arr[k][l]==1:
dfs(k, l)

print(num)
result.sort()
for j in result:
if j==0:
continue
print(j)
Loading