Skip to content

Commit

Permalink
[코딩테스트책] 5-1. 음료수얼려먹기 (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
heerucan committed Feb 13, 2022
1 parent b0892f8 commit 87fbc5e
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 0 deletions.
25 changes: 25 additions & 0 deletions CodingTest/CH4 구현/4-3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# N 입력받기
n = list(input())

x = n[0]
y = n[1]
print(x, y)

# # 이동 방향
# dx = [2, 2, 1, 1, -1, -1, -2, -2]
# dy = [1, -1, 2, -2, 2, -2, -1, 1]
# #
# # 이동 계획을 하나씩 확인
# for plan in plans:
# # 이동 후 좌표 구하기
# for i in range(len(move_types)):
# if plan == move_types[i]:
# nx = x + dx[i]
# ny = y + dy[i]
# # 공간을 벗어나는 경우 무시
# if nx < 1 or ny < 1 or nx > n or ny > n:
# continue
# # 이동 수행
# x, y = nx, ny
#
# print(x, y)
29 changes: 29 additions & 0 deletions CodingTest/CH5 DFSBFS/DFS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

def dfs(graph, v, visited):
# 현재 노드를 방문 처리
visited[v] = True
print(v, end = '')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)


# 각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트)
graph = [
[],
[2, 3, 8], # 1번 노드와 연결된 노드들의 리스트
[1, 7], # 2번 노드와 연결된 것
[1, 4, 5], # 3번 노드와 연결된 것
[3, 5], # 4번 노드와 연결된 것
[3, 4], # 5번 노드와 연결된 것
[7], # 6번 노드와 연결된 것
[2, 6, 8], # 7번 노드와 연결된 것
[1, 7] # 8번 노드와 연결된 것
]

# 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited = [False] * 9

# 정의된 DFS 함수 호출
dfs(graph, 1, visited)
38 changes: 38 additions & 0 deletions CodingTest/CH5 DFSBFS/음료수얼려먹기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

data = []
a, b = map(int, input().split())

data = []
for i in range(a):
data.append(list(map(int, input())))

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

# DFS로 특정한 노드를 방문한 뒤에 연결된 모든 노드들도 방문
def dfs(x, y):
# 주어진 범위를 벗어나는 경우에는 즉시 종료
if x <= -1 or x >= a or y <= -1 or y >= b:
return False

# 현재 노드를 아직 방문하지 않았다면
if data[x][y] == 0:
# 해당 노드 방문 처리
data[x][y] = 1
# 상, 하, 좌, 우의 위치들도 모두 재귀적으로 호출
dfs(x - 1, y)
dfs(x, y - 1)
dfs(x + 1, y)
dfs(x, y + 1)
return True
return False

# 모든 노드(위치)에 대하여 음료수 채우기
result = 0
for i in range(a):
for j in range(b):
# 현재 위치에서 DFS 수행
if dfs(i, j) == True:
result += 1
print(i,j,dfs(i, j), result)

print(result)

0 comments on commit 87fbc5e

Please sign in to comment.