자료구조 공부 2024.05.08
스택
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
arr = input("괄호가 포함된 문장을 입력하세요 ")
dt = []
for i in arr:
if i == '(':
dt.append(i)
print(f"스택에 추가되는 과정{dt}")
if i == ')':
dt.pop()
print(f"스택에 삭제되는 과정{dt}")
if len(dt) == 0:
print("ok")
else:
print("error")
트리자료구조
- 깊이우선
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 그래프의 연결 정보를 표현한 딕셔너리입니다.
# 각 노드는 키(key)로, 해당 노드와 연결된 노드들의 목록은 값(value)으로 표현됩니다.
DFS_graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C'],
}
# 각 노드의 방문 여부를 나타내는 리스트입니다.
visited_list = list()
# 깊이 우선 탐색을 위한 함수를 정의합니다.
def dfs_func(DFS_graph, start):
# 시작 노드를 방문한 것으로 표시하고 방문한 노드 리스트에 추가합니다.
visited_list.append(start)
# 방문한 지점들을 출력합니다.
print(f'방문지점:{visited_list}')
# 시작 노드와 연결된 각 노드에 대해 반복합니다. // 딕셔너리에서 [] 안의 배열 값을 출력 함
for node in DFS_graph[start]:
print("node:", node)
# print(DFS_graph[start])
# 특정 조건을 만족하면 탐색을 중단합니다.
if node == 'C':
print("STOP")
break
# 현재 노드가 방문되지 않았다면 재귀적으로 탐색합니다.
if node not in visited_list:
dfs_func(DFS_graph, node)
# 시작 노드 'A'를 기준으로 깊이 우선 탐색을 시작합니다.
dfs_func(DFS_graph, 'A')
-
- 너비우선
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from collections import deque
# 그래프의 연결 정보를 표현한 딕셔너리입니다.
BFS_graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C'],
}
# 각 노드의 방문 여부를 나타내는 리스트입니다.
visited_list = list()
# 너비 우선 탐색을 위한 함수를 정의합니다.
def bfs_func(BFS_graph, start):
# 시작 노드를 큐에 추가합니다.
que = deque([start])
# 큐가 비어있지 않은 동안 반복합니다.
while que:
# 큐에서 노드를 꺼냅니다.
node = que.pop()
print("node:", node)
# 특정 조건을 만족하면 탐색을 중단합니다.
if node == 'E':
print("STOP")
break
# 노드가 방문되지 않았다면 방문 여부를 표시하고 인접 노드들을 큐에 추가합니다.
if node not in visited_list:
visited_list.append(node)
print(f"방문지점 : {visited_list}")
que.extendleft(BFS_graph[node])
# 시작 노드 'A'를 기준으로 너비 우선 탐색을 시작합니다.
bfs_func(BFS_graph, 'A')
선형검색
- while문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 선형 검색을 수행할 리스트입니다.
LSearch_list = [12, 10, 27, 51, 7, 96]
print(LSearch_list)
# 검색을 위한 인덱스의 시작값입니다.
i = 0
# 사용자로부터 찾고자 하는 값을 입력받습니다.
search = int(input("당신이 찾고자 하는 수를 입력해 검색해보세요 >>> "))
# 선형 검색을 수행하는 반복문입니다.
while i < len(LSearch_list):
# 현재 인덱스의 값을 출력합니다.
print(f"index {i} :", LSearch_list[i])
# 찾고자 하는 값과 현재 인덱스의 값을 비교합니다.
if LSearch_list[i] == search:
# 일치하는 값이 발견되면 해당 인덱스를 출력하고 탐색을 종료합니다.
print(f"index[{i}]에서 탐색 성공\n탐색종료")
# 반복문을 종료합니다.
break
else:
# 일치하는 값이 발견되지 않았으면 다음 인덱스로 이동합니다.
i += 1
- for문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 선형 검색을 수행할 리스트입니다.
LSearch_list = [12, 10, 27, 51, 7, 96]
print(LSearch_list)
# 사용자로부터 찾고자 하는 값을 입력받습니다.
search = int(input("당신이 찾고자 하는 수를 입력해 검색해보세요 >>> "))
for i in range(len(LSearch_list)):
print(f"index {i} :", LSearch_list[i])
# 찾고자 하는 값과 현재 인덱스의 값을 비교합니다.
if LSearch_list[i] == search:
# 일치하는 값이 발견되면 해당 인덱스를 출력하고 탐색을 종료합니다.
print(f"index[{i}]에서 탐색성공\n탐색종료")
# 반복문을 종료합니다.
break
else:
# 일치하는 값이 발견되지 않았으면 다음 인덱스로 이동합니다.
print(f"index[{i}]에서 탐색실패\n탐색계속")
continue
- 사용자에게 값을 받고 선형 검색하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 사용자로부터 입력받은 숫자들을 저장할 리스트를 생성합니다.
LSearch_list = list()
# 사용자로부터 숫자를 입력받아 리스트에 추가합니다.
for i in range(5):
num = int(input("입력할 수를 입력하세요: "))
LSearch_list.append(num)
# 입력받은 숫자들을 출력합니다.
print("리스트 =", LSearch_list)
# 사용자로부터 찾고자 하는 숫자를 입력받습니다.
search = int(input("찾고자 하는 수를 입력하세요: "))
# 리스트를 선형 검색하여 찾고자 하는 숫자를 탐색합니다.
for idx in range(len(LSearch_list)):
# 현재 인덱스의 값을 출력합니다.
print(f"index {idx}:", LSearch_list[idx])
# 찾고자 하는 숫자를 발견하면 해당 인덱스를 출력하고 탐색을 종료합니다.
if LSearch_list[idx] == search:
print(f"인덱스[{idx}]에서 탐색 성공")
print("탐색 종료")
# 반복문을 종료합니다.
break
else:
# 찾고자 하는 숫자가 아직 발견되지 않았으면 다음 인덱스로 이동합니다.
continue
강의실
- 개발비용에서 우선순위는 인건비
- 개발 범위 결정.
개발하려면 개발하고자하는 영역의 배경지식 필요
- 경제적타탕성
- 기술적타당성
법적타당성(상업적이용가능한 폰트인지, 불법프로그램을 썼는지..등등)
- 개발은 개발자의 자질과 프로그램 복잡도와 크기에 따라 개발시간이 달라짐
- kisa : (나주) 방통위, 한국인터넷진흥원
- nia : (대구) 해안부산하, 정보관리
- kica : 한국정보인증
- etri : 한국전자통신
- 웹접근성인증평가는 문화정보원(?), 웹접근성인증평가원(?)
상위기관을 알아야하는 이유는 오더가 어떻게 내려오는지를 파악하기 위해서 알아야함
This post is licensed under CC BY 4.0 by the author.