알고리즘 문제 풀이/Programmers
[11회차]
중앙백
2021. 12. 15. 19:53
Programmers Level.2 땅따먹기
def solution(land):
dP = [[0,0,0,0] for _ in range(len(land))]
dP[0] = land[0]
for i in range(1, len(land)):
for j in range(4):
for k in range(4):
if j != k:
dP[i][j] = max(dP[i-1][k], dP[i][j])
dP[i][j] += land[i][j]
answer = max(dP[len(land) - 1])
return answer
- DP 문제.
Programmers Level.2 삼각 달팽이
def solution(n):
answer = []
graph = [[0] * i for i in range(1, n + 1)]
num = 1
r = -1
c = 0
for i in range(n):
for j in range(i, n):
if i % 3 == 0:
r += 1
if i % 3 == 1:
c += 1
if i % 3 == 2:
r -= 1
c -= 1
graph[r][c] = num
num += 1
for i in graph:
for j in i:
answer.append(j)
return answer
Programmers Level.3 가장 먼 노드
from collections import deque
def solution(n, edge):
graph = [[] for _ in range(n + 1)]
distance = [0] * (n + 1)
for a, b in edge:
graph[a].append(b)
graph[b].append(a)
q = deque()
q.append(1)
while q:
node = q.popleft()
for i in graph[node]:
if distance[i] == 0:
distance[i] = distance[node] + 1
q.append(i)
distance[1] = 0
answer = [i for i in distance if i == max(distance)]
return len(answer)
- BFS 문제
Programmers Level.3 네트워크
def dfs(node, visited, computers):
if not visited[node]:
visited[node] = True
for i in range(len(computers)):
if computers[node][i] == 1:
dfs(i, visited, computers)
return True
return False
def solution(n, computers):
answer = 0
visited = [False] * (n)
for i in range(n):
if dfs(i, visited, computers):
answer += 1
return answer
- DFS 문제
- 재귀함수 대신 stack으로 구현한 풀이가 있길래 공부해봤다.
def solution(n, computers):
answer = 0
visited = [0 for i in range(n)]
def dfs(computers, visited, start):
stack = [start]
while stack:
j = stack.pop()
if visited[j] == 0:
visited[j] = 1
# for i in range(len(computers)-1, -1, -1):
for i in range(0, len(computers)):
if computers[j][i] ==1 and visited[i] == 0:
stack.append(i)
i=0
while 0 in visited:
if visited[i] ==0:
dfs(computers, visited, i)
answer +=1
i+=1
return answer