Post

자료구조 공부 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")

alt text

트리자료구조

alt text

  • 깊이우선
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.