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
17 changes: 17 additions & 0 deletions hyungrak/2주차/11722.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
11722

import sys

input = sys.stdin.readline

n = int(input())
a = list(map(int, input().split()))
reversed_a = a[::-1]
mem = [1] * n

for i in range(1, n):
for j in range(i):
if reversed_a[i] > reversed_a[j]:
mem[i] = max(mem[i], mem[j] + 1)

print(max(mem))
60 changes: 60 additions & 0 deletions hyungrak/2주차/1520.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
1520

# #1260(DFS, BFS 공부하기)
# import sys
# from collections import deque


# input = sys.stdin.readline
# n, m, v = map(int, input().split())
# graph = [[False] * (n + 1) for _ in range(n + 1)]

# visited_dfs = [False] * (n + 1)
# visited_bfs = [False] * (n + 1)

# for i in range(m):
# a, b = map(int, input().split())
# graph[a][b] = graph[b][a] = 1

# def dfs(v):
# visited_dfs[v] = True
# print(v, end = " ")
# for i in range(1, n+1):
# if not visited_dfs[i] and graph[v][i] == 1:
# dfs(i)



# def bfs(v):
# queue = deque([v])
# visited_bfs[v] = True

# while queue:
# v= queue.popleft()
# print(v, end = " ")
# for i in range(1, n+1):
# if not visited_bfs[i] and graph[v][i] == 1:
# queue.append(i)
# visited_bfs[i] = True

# dfs(v)
# print()
# bfs(v)


#1520
import sys
input = sys.stdin.readline

m, n = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(m)]

mem = [[0 for _ in range(n)] for _ in range(m)] #dp를 위한 메모리
move = [[1, 0], [-1, 0], [0, 1], [0, -1]] #움직임

def dfs(a, b):
for i in move:
ma, mb = a + i[0], b + i[1]
if maps[a][b] > maps[ma][mb]:


24 changes: 24 additions & 0 deletions hyungrak/2주차/1759.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from itertools import combinations


l, c = map(int, input().split())

c_list = list(input().split())
c_list.sort()
vowel = ['a', 'e', 'i', 'o', 'u']

combi_list = list(map(''.join, combinations(c_list, l)))

for c in combi_list:
cnt_v = 0
cnt_c = 0
for char in c:
if char in vowel:
cnt_v += 1
else:
cnt_c +=1
if cnt_v > 0 and cnt_c > 1:
print(c)

'''처음에 모음이 최소 1개 이상 포함되어 있는 것만 출력했는데 계속 틀렸었다. 그래서 자음이 최소 2개 이상 포함되어 있는 것도 체크해서 출력했더니 통과됨.
l이 3 이상인 것이 조건이라 모음 조건만 확인해주면 될 줄 알았음. 반례가 무엇인지는 찾아보아야겠음.'''
36 changes: 36 additions & 0 deletions hyungrak/2주차/2579.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import sys
input = sys.stdin.readline

n = int(input())
stair = [0] * 301
dp = [0] * 301

for i in range(n):
stair[i] = int(input())

dp[0] = stair[0]
dp[1] = stair[0] + stair[1]
dp[2] = max(stair[0] + stair[2], stair[1] + stair[2])
for i in range(3, n):
dp[i] = (max(dp[i-3] + stair[i-1] + stair[i], dp[i-2] + stair[i]))

print(dp[n-1])


#2579 런타임 에러 코드
# import sys
# input = sys.stdin.readline

# n = int(input())
# stair = []

# for i in range(n):
# stair.append(int(input()))

# dp = [stair[0], stair[0] + stair[1], max(stair[0] + stair[2], stair[1] + stair[2])]
# for i in range(3, n):
# dp.append(max(dp[i-3] + stair[i-1] + stair[i], dp[i-2] + stair[i]))

# print(dp[-1])

'''이 코드는 왜 런타임 에러가 뜰까???? ㅜㅜ'''
27 changes: 27 additions & 0 deletions hyungrak/2주차/9252.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
9252

import sys

input = sys.stdin.readline

str_a = input().rstrip()
str_b = input().rstrip()
la = len(str_a)
lb = len(str_b)
mem = [['' for _ in range(la+1)] for _ in range(lb+1)] #범위를 딱맞게 했더니 index error가 남
'''dp 표를 이용함. '''

for i in range(1, lb+1):
for j in range(1, la+1):
if str_a[j-1] == str_b[i-1]:
mem[i][j] = mem[i-1][j-1] + str_a[j-1]
else:
if len(mem[i-1][j]) >= len(mem[i][j-1]):
mem[i][j] = mem[i-1][j]
else:
mem[i][j] = mem[i][j-1]

ans = mem[-1][-1] #이거를 해주고 안해주고 차이에서 시간초과가 나냐 안나나가 결정됨 ㅇㅅㅇ.. 왤까??

print(len(ans), ans, sep="\n")

35 changes: 35 additions & 0 deletions hyungrak/3주차/11724.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 = map(int, input().split())
graph = [[False] * (n+1) for _ in range(n+1)]
visited = [False] * (n+1)
cnt = 0
visited[0] = True

for i in range(m):
a, b = map(int, input().split())
graph[a][b] = graph[b][a] = 1

def bfs(v):
queue = deque([v])
visited[v] = True

while queue:
v = queue.popleft()
for i in range(1, n+1):
if not visited[i] and graph[v][i] == 1:
queue.append(i)
visited[i] = True
return 0

for i in range(1, n+1):
if visited[i] == False:
bfs(i)
cnt += 1
else:
continue

print(cnt)
105 changes: 105 additions & 0 deletions hyungrak/3주차/1520.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
1520

# #1260(DFS, BFS 공부하기)
# import sys
# from collections import deque


# input = sys.stdin.readline
# n, m, v = map(int, input().split())
# graph = [[False] * (n + 1) for _ in range(n + 1)]

# visited_dfs = [False] * (n + 1)
# visited_bfs = [False] * (n + 1)

# for i in range(m):
# a, b = map(int, input().split())
# graph[a][b] = graph[b][a] = 1

# def dfs(v):
# visited_dfs[v] = True
# print(v, end = " ")
# for i in range(1, n+1):
# if not visited_dfs[i] and graph[v][i] == 1:
# dfs(i)



# def bfs(v):
# queue = deque([v])
# visited_bfs[v] = True

# while queue:
# v= queue.popleft()
# print(v, end = " ")
# for i in range(1, n+1):
# if not visited_bfs[i] and graph[v][i] == 1:
# queue.append(i)
# visited_bfs[i] = True

# dfs(v)
# print()
# bfs(v)


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

# m, n = map(int, input().split())
# maps = [list(map(int, input().split())) for _ in range(m)]

# move_a = [-1, 1, 0, 0]
# move_b = [0, 0, -1, 1]


# def dfs(v):
# stack = deque([v])
# cnt = 0
# while stack:
# v = stack.pop()
# for i in range(4):
# ma = v[0] + move_a[i]
# mb = v[1] + move_b[i]
# if ma < 0 or mb < 0 or ma >= m or mb >= n:
# continue
# else:
# if maps[ma][mb] < maps[v[0]][v[1]]:
# stack.append([ma, mb])
# if ma == m-1 and mb == n-1:
# stack.pop()
# cnt += 1
# print(cnt)

# dfs([0, 0])

# '''시간 초과가 나오는 코드 모든 경로를 다 탐색해서 그런듯 ㅜㅜ'''


#1520
'''이 풀이는 다른 사람들이 일반적으로 푼 풀이랑 똑같은 듯. dfs에 dp까지 적용을 해서 푸는 것.'''
import sys
input = sys.stdin.readline

m, n = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(m)]
dp = [[-1] * n for _ in range(m)]
move_a = [-1, 1, 0, 0]
move_b = [0, 0, -1, 1]

def dfs_dp(v):
if v[0] == m - 1 and v[1] == n - 1: #목적지는 1로
return 1
if dp[v[0]][v[1]] != -1: #이미 방문한 곳이면 그 값 반환
return dp[v[0]][v[1]]
dp[v[0]][v[1]] = 0 #방문처리 후에 뒤로가는 과정에서 그 값 추가
for i in range(4):
ma = v[0] + move_a[i]
mb = v[1] + move_b[i]
if 0 <= ma < m and 0 <= mb < n:
if maps[ma][mb] < maps[v[0]][v[1]]:
dp[v[0]][v[1]] += dfs_dp([ma, mb]) #재귀호출 4개 방향으로 해서 해당위치 dp값 계속 추가
return dp[v[0]][v[1]] #4개 방향을 모두 돌아 탐색이 끝나면 dp[v[0]][v[1]]값 리턴해서 부모 노드의 4개 방향 탐색 중 하나 완료

print(dfs_dp([0, 0]))
28 changes: 28 additions & 0 deletions hyungrak/3주차/2178.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
miro = [list(map(int, ' '.join(input().split()))) for i in range(n)]
move_a = [1, -1, 0, 0]
move_b = [0, 0, 1, -1]

def bfs(v):
queue = deque([v])
while queue:
v = queue.popleft()
for i in range(4):
ma = v[0] + move_a[i]
mb = v[1] + move_b[i]
if ma < 0 or mb < 0 or ma >= n or mb >= m:
continue
else:
if miro[ma][mb] == 1:
miro[ma][mb] = miro[v[0]][v[1]] + 1
queue.append([ma, mb])

return miro[n-1][m-1]

print(bfs([0, 0]))

38 changes: 38 additions & 0 deletions hyungrak/3주차/7576.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import sys
input = sys.stdin.readline
from collections import deque

m, n = map(int, input().split())
tomato = [list(map(int, input().split())) for _ in range(n)]
queue = deque([])
x = [-1, 1, 0, 0]
y = [0, 0, -1, 1]
ans = 0

for i in range(n):
for j in range(m):
if tomato[i][j] == 1:
queue.append([i, j])


while queue:
k = queue.popleft()
for i in range(4):
dx = k[0] + x[i]
dy = k[1] + y[i]
if dx < 0 or dy < 0 or dx >= n or dy >= m:
continue
elif tomato[dx][dy] == 0:
tomato[dx][dy] = tomato[k[0]][k[1]] + 1
queue.append([dx, dy])

for i in range(n):
for j in range(m):
if tomato[i][j] == 0:
print(-1)
exit(0)
ans = max(ans, tomato[i][j])

print(ans-1)


Loading