마음가짐 : 오류나 에러가 나와도 침착하게 대처한다.

클라이언트 : 요청을 서버에 보낸다.

서버 : 요청을 받아서 응답을 해준다.

api : 데이터를 어떻게 주고 받자 라고 정한 약속. 데이터만 줄지, FE를 줄지, 둘다 줄지.

 

파이썬 문법: 데이터타입

변수 : 데이터를 담는 바구니
myname = 'bamtol'
등호로 구분한다.

 

숫자형 : 숫자가 변수 안에 들어가 있다.

mynum = 22
mynum2 = 22.8
사칙연산이 가능하다.
+, -, *, /
 

문자형 : 문자가 변수 안에 들어가 있다.

myheight = '180'
money = 'a lot'
큰 따옴표나 작은 따옴표로 꼭 감싸줘야한다.
문자열의 덧셈, 곱셈 가능.
문자열 기준으로 나누기도 가능
.split('@' ) (=@을 기준으로 리스트 형태로 나뉘어진다.)
 

리스트 : 하나의 변수에 여러개의 데이터를 나열 하듯 저장.

a= [1,2,3,4,5,6,7,8,9]
a[0] = 1
b = ['너' , '나']
b[1] = '나'
.append()로 리스트에 원소를 추가할 수 있다.

 

딕셔너리 : 대응 관계로 데이터를 나타내는 자료형)

dog = {'cute' : 'jindo' , 'alsocute' : 'mydog'}
dog['cute'] = 'jindo'
 

파이썬 문법 2 : 조건문과 반복문

들여쓰기를 지켜야 에러가 발생하지 않는다.
조건문 : 참과 거짓을 판단하는 문장.
if 조건:
	조건이 참일 경우 실행
else:
	조건이 거짓일 경우 실행
 
반복문 : 리스트와 같이 반복되는 곳에서 사용.
for 변수 in 리스트:
	실행 할 문장
파이썬 문법 3: 함수과 클래스
함수 : 인자들을 함수에 넣고 결과물을 내오는 것.
def 함수명('매개변수'):
	실행 할 문장들
클래스: 빵틀의 모양에 따라 만들어지는 빵의 모양이 다르다.(클래스의 속성)
객체 : 빵틀로 만들어진 빵.(클래스의 속성을 갖고 있는 객체)
class myBakery:
    title = ''
    time = ''
    taste = ''




cookie = myBakery()
cookie.title = '머핀'
cookie.time = '1h'
cookie.taste = '초콜릿'



print(cookie)
 

파이썬의 웹 프레임워크

프레임워크 : 개발을 도와주는 하나의 틀

최소한의 기능만 제공하는 형태

플라스크, 피라미드

많은 기능을 제공하는 형태

장고

장단점

최소한의 기능은 자유롭지만 많은 공부가 필요하고 커뮤니티가 작다.
장고는 이미 많이 만들어져 있고 틀에 따라야 하지만 또 만들 필요가 없고 커뮤니티가 크다.
 

장고 알아보기

MVT 패턴

Model : 데이터가 저장되고 사용되는 형태.
View : 서비스가 동작하는 부분. url요청 후 응답 그 사이에 일어나는 서비스들이 존재하는곳
Template : 사용자에게 보여지는 부분
 
ORM : 파이썬으로 데이터베이스 클래스 모델을 만들고, 모델을 바탕으로 데이터 베이스를 다룰 수 있도록 도와줌.
 

장고 프로젝트 만들기

새 프로젝트에서 장고를 선택해서 폴더를 확인하고 프로젝트를 만들면 된다.

settings.py 살펴보기

INSTALLED_APPS - 장고에 설치 된 앱들
MIDDLEWARE - 사용자 요청/응답 사이에서 작동하는 시스템들
TEMPLATES - 나의 html파일을 자동으로 인식
DATABASES - 내가 사용할 데이터베이스 연동 설정
AUTH_PASSWORD_VALIDATORS - 패스워드 보안 수준 검증
LANGUAGE_CODE - 화면에 어떤 언어를 보여줄것인지
TIME_ZONE - 우리가 어떤 시간에 있는지
 

장고를 사용한 화면 띄우기

 

인코딩 에러

실행 시 인코딩 에러가 난다면 설정에서 콘솔과 파일 인코딩을 utf-8로 바꾸어주면 해결이 된다.
 

글자 띄우기

views.py 만들고 코드 붙여 넣기
from django.http import HttpResponse





def base_response(request):
    return HttpResponse("안녕하세요! 장고의 시작입니다!")
HttpResponse()는 괄호 안에 있는 내용을 인터넷 창 화면에 보여주는 역할
(1) views.py에 글자를 띄우는 함수를 만들었다.
 
urls.py를 아래와 같이 고쳐준다.
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.base_response,name='first_test'), # 이 줄 추가. 
]
(2) urls.py에 (1)에서 만든 함수를 불러올 수 있도록 url을 만들고 함수 이름을 추가했다.
 

html파일 띄우기

template 폴더에 my_test.html 파일을 만든다.
views.py에 코드를 추가한다. render 함수는 template에 있는 html 파일을 찾아서 보여준다.
from django.shortcuts import render



def first_view(request):
    return render(request, 'my_test.html')
urls.py도 추가해준다.
 
from django.contrib import admin
from django.urls import path
from . import views



urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.base_response,name='first_test'),
    path('first/', views.first_view,name='first_view'), # 이 줄 추가. 
]

'Django' 카테고리의 다른 글

장고 정리: 5주  (0) 2023.04.12
무신사 ERD  (0) 2023.04.09
파이썬 장고 실무 기초: 4  (0) 2023.04.05
파이썬 장고 실무 기초: 3  (0) 2023.04.05
파이썬 장고 실무 기초: 2  (0) 2023.04.04

반복 불가능한 정수 객체는 압축을 풀 수 없다는 오류다.

항상 잘 돌리던 딕셔너리 for문이 안돌아가서 한참 하나씩 뜯어보면서 뭐가 잘못된 것인지 찾아봤다.

items()를 빼먹었다..

 

'에러노트 해결' 카테고리의 다른 글

List Index Out of Range  (0) 2023.04.02
subscriptable 오류  (0) 2023.04.02
SyntaxError: invalid syntax 뭘까? 왜 나는 걸까?  (0) 2023.04.02
monster = [monster_dict][monster_select]['summon']

이렇게 써버렸다.. 하 지금 생각해보니까 어이가 없네.

괄호는 리스트의 원소를 인덱싱 할 때 사용한다. 나는 monster_dict의 원소를 인덱싱해야하는데 컴퓨터한테는 인덱싱할 리스트나 딕셔너리 없이 인덱싱하라고 하고 있으니.. 얼마나 바보라고 생각했을지..

 

 

monster_dict = {
    1: Monster('슬라임', 100, 20), 'korean_monster_name': '슬라임',
    2: Monster('주황버섯', 100, 20), 'korean_monster_name': '주황버섯',
    3: Monster('골렘', 100, 20), 'korean_monster_name': '골렘',
    4: Monster('주니어발록', 100, 20), 'korean_monster_name': '주니어발록',
    5: Monster('발록', 100, 20), 'korean_monster_name': '발록',
}

이렇게 몬스터의 딕셔너리를 만들고..

for k, v in monster_dict.items():
    print(f"{k} : {v['korean_monster_name']}")
monster_select = int(input('몬스터를 선택해주세요'))
monster = [monster_dict][monster_select][Monster]

이렇게 for문으로 돌려서 이름을 출력해주고 싶었다..

그리고 객체를 생성할때 Monster만 필요하기 때문에 인덱싱을 하려 했으나..

TypeError: 'Monster' object is not subscriptable

오류가 나버렸다.

subscriptable -  인덱싱이나 슬라이싱이 가능한

Monster는 인덱싱이 안된다..

어떻게 해야할까.. 일단 보류.

 

해결!!!

monster_dict = {
    1: {'summon': Monster('슬라임', 100, 20), 'kmn': '슬라임'},
    2: {'summon': Monster('주황버섯', 100, 20), 'kmn': '주황버섯'},
    3: {'summon': Monster('골렘', 100, 20), 'kmn': '골렘'},
    4: {'summon': Monster('주니어발록', 100, 20), 'kmn': '주니어발록'},
    5: {'summon': Monster('발록', 100, 20), 'kmn': '발록'},
}

후~ 깔끔하게 해결~

for k, v in player.actions.items():
        print(f'{k} : {v['varbose']}')

Syntax - 컴퓨터 언어의 문법

invalid - 효력없는, 근거없는

SyntaxError: invalid syntax - 문법오류: 근거없는 문법

문법이 잘못되었다고 한다. 내 경우에 한참 봤지만 해결하고보니 너무 쉬웠다.

모든것을 작은 따옴표로 묶어서 그렇다.

문법에 맞게 고쳐보자면

print(f"{k} : {v['varbose']}")

이렇게 쓰던지, varbose를 큰 따옴표로 쓰던지 해야한다. 아이고 증말~

'에러노트 해결' 카테고리의 다른 글

TypeError: cannot unpack non-iterable int object  (0) 2023.04.02
List Index Out of Range  (0) 2023.04.02
subscriptable 오류  (0) 2023.04.02

구현 훈련하기 1

  •  
  • 다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 가장 큰 수를 반환 하시오.
def find_max_num(array):
    max_num = array[0]
    for num in array:
        if max_num < num:
            max_num = num
    return max_num
a = find_max_num([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a)
구현 훈련하기 2
  • 프로그램이 1~100 숫자 중 하나를 랜덤으로 정함.
  • 사용자는 이 숫자를 찾추어야 함.
  • 입력한 숫자보다 크면 UP 아니면 DOWN 정답이면 CORRECT 출력.
  • 지금까지 숫자를 입력한 횟수를 알려줌.
import random


def game():
    correct = random.randint(1, 100)
    count = 0
    while True:
        print(f'현재 {count}번 시도')
        count += 1
        answer = int(input('정답을 입력해주세요'))
        if answer > correct:
            print('DOWN')
        elif answer < correct:
            print('UP')
        elif answer == correct:
            print('정답')
            break
    print(f'{count}번 만에 정답')


game()
리턴은 함수 실행을 멈추고 그 리턴 값을 쓸 수 있다.
break은 그 영역을 멈추게 한다.
 
스택 / 큐, 정렬
  •  
  • CS(Computer Science) 전반에 자주 등장 하는 자료구조
  • 코테 빈출 유형
 

스택

  • 한쪽 끝이 막혀 있는 통과 같은 구조
  • push : 스택에 저장한다.
  • pop: 스택에서 빼낸다.
  • peek: 최근 자료를 볼 수 있다.
  • 나중에 삽입된 데이터가 먼저 나오는 자료 구조 : 후입선출(last in first out , LIFO)
 

  • 양쪽 끝이 뚫려 있는 통과 같은 자료구조
  • enqueue : 큐에 저장한다.
  • dequeue: 큐에서 빼낸다
  • 먼저 삽입된 데이터가 먼저 나오는 자료 구조: 선입선출(first in first out, FIFO)
 

스택/큐의 활용

자료구조/ 알고리즘이 어디에 어떻게 쓰이는지가 중요.

스택

  • 데이터를 임시 저장 하고 싶을 때.
  • 최근에 임시 저장한 데이터를 가장 먼저 활용해야 할 때
  • 쌍을 맞추어 데이터를 임시 저장 하고 싶을 때
  • 뒤로 가기 기능을 만들고 싶을 때
  • 함수의 실행
  • 문자열로 주어진 괄호가 쌍이 맞는지 검사. ( 를 만나면 push. ) 를 만나면 pop. 스택이 마지막에 비어있다면 올바른 괄호.
 
 

  • 데이터를 임시 저장하고 싶을 때
  • 큐를 버퍼로 활용
  • 임시 저장된 데이터를 차례차례 내보내야/꺼내와야 할 때
  • 줄을 세우고 싶을 때
  • 영화관 예약, 입장 순
  • 변형 1: 원형. real가 원형을 돌면서 데이터를 넣는다. front가 real를 뒤따라 돌면서 데이터를 꺼낸다.
  • 변형 2: 덱. 양쪽에서 데이터 삽입, 삭제가 가능한 큐
  • 변형 3: 우선순위 큐. 순서 상관없이 우선순위를 정하고 그 순위가 높은 데이터가 먼저 나감.

 

정렬의 개념

데이터를 정해진 기준에 따라 재배치 하는 것.
  • 다양한 정렬 알고리즘이 존재. 알고리즘 마다 성능이 다름.
sorted() : 배열의 값 자체를 조작하지는 않는다.
sort() : 배열의 값 자체를 조작한다.
  • 정렬 알고리즘의 원리를 묻는 코테도 있기 때문에 알아야함.
삽입 정렬
앞에서부터 차례대로 비교하여, 자신의 위치를 찾아 삽입하는 방식
  • 시간복잡도 O(n^2)
버블 정렬
  • 요소를 쭉 순회
  • 인접한 요소와 비교, 정렬이 제대로 되었는지 확인 정렬이 제대로 될 때까지 인접한 요소와 바꿔치기 하는 방법
  • 시간복잡도 O(n^2)
선택 정렬
  • 요소들 중 최소값 찾아 그 값을 맨 처음 값으로 대체.
  • 맨 처음 값을 뺀 나머지 요소들이 정렬될 때 까지 반복.
  • 시간복잡도 O(n^2)
퀵 정렬
  • 분할 정복 알고리즘의 일종
  • 큰 문제를 작은 문제로 분리하여 작은 문제를 해결함으로 큰 문제를 해결
  • 이름처럼 빠른 정렬: 시간복잡도O(nlogn)
  • 예외적으로 배열이 정렬되어 있는 경우: 시간 복잡도 (O^2)
  • 내장 정렬 함수의 대부분의 원리가 되는 알고리즘
임의의 하나의 요소를 고른다. 이를 피벗(기준점) 이라고 한다.
피벗보다 작은 부분집합, 큰부분집합을 선정.
피벗의 좌우를 정렬한다.
피벗의 좌는 작은 부분 집합, 우는 큰 부분 집합
분할 된 두개의 작은 배열에 재귀적으로 이 과정을 반복.
재귀함수는 자기 자신을 호출하는 함수.
 
삽입 정렬, 버블 정렬, 선택 정렬을 실습을 통해 훈련하면 알고리즘 학에 큰 도움이 된다.

'자료구조 , 알고리즘' 카테고리의 다른 글

자료구조/ 알고리즘 특강: 1  (0) 2023.03.30

배운것은.. 있는 것 같은데.. 내가 할 수 있을까 하는 생각에 막막함이 밀려온다..

주말도 열심히 12시간씩 공부를 하고 있지만 에러가 나는 부분에서 시간을 쓰다보니 효율이 떨어진다.

더 좋은 방법은 바로바로 옆에서 누군가 알려주는 것이겠지만 주중은 프로젝트 하느라 바쁘고

주말은 혼자하는 방법 밖에 없다. 끝까지 가보겠다..!

 

27일 월요일 : git 관련해서 공부했네. PR,amend, stash, 커밋 메시지 작성요령, 커밋 단위, 등등 그래도 뭔가 하긴 했구나..

 

28일 화요일 : 파이썬 과제 했구나! 할때도 막막했는데 하다보니 운이 좋게 일찍 과제를 끝냈던 기억이 나네.. 그래도 이때 보다는 지금이 더 성장했네. 이 때 보다 지금 더 깔끔하게 만들 수 있으니까.

 

29일 수요일: 아 팀 프로젝트 하면서 super()를 계속 super로 써서 에러가 났었다. 이걸 이때 알았다. 그리고 return을 정말 잘 활용하는 팀원을 만나서 많이 배웠다. **님 쵝오!

 

30일 목요일 : 자료구조 알고리즘 했구나. 아 29일에 강의를 했는데 내가 정리를 안했구나.. 이거를 이제 지금 부터 정리하면서 공부를 할 예정. 오늘이 끝나기 전에 해야한다.

 

31일 금요일: 팀 프로젝트 끝나고 강의 해설 했던 날. 이해하기 너무 어려웠고 포기해야하나 싶기도 했다. 하지만 주말을 이용해서 따라잡기로 마음 잡고 열심히 해봤지만 이해는 했지만 구현은 스스로 어렵지 않을까 생각이 든다. 하나씩 정리해서 포스팅 했으니 잘 모를 때 찾아서 참고하도록 해보자.

 

이번주는 마음적으로 힘들었다. 내 머리 회전이 너무 느리다고 생각이 들었고 어디서 부터 잘 못 된건지 갈피를 잡지 못했다. 포기해야하나 싶었다. 하지만 스스로 물어봤다. 열심히 공부했니? 절대 못할 것 같니? 아니라는 답이 나왔고, 시간을 정말 잘 써야겠다고, 지금보다 열심히 할 거라고 마음을 먹었다.

가보자! 밤톨이 나무가 될 때 까지!!

  • 상속 받지 않을 클래스는 괄호가 없어도 괜찮다.
  • 클래스를 만들기 전에 상속 시켜줄 공통 부분을 생각한 후 만들어야 한다.
  • 프로젝트를 진행하면서 코드를 하나씩 짜면서 진행하는게 아니라 큰 틀을 잡고 주석으로 설명을 넣으면서 큰 단위에서 작은 단위로 코딩을 한다.
  • 들여쓰기가 정말 중요하다.
  • 휴먼에러를 줄일  수 있는 방향으로 코드를 짠다.
  • 예약어나 함수랑 변수의 이름이 같지 않게 만들어줘야한다. 굳이 해야겠다면 _언더바로 구분을 해주자.
enumerate 문법
b = {i:x for i, x in enumerate(a)}
딕셔너리 형태로 반복문이 출력.
player = Player(player_name, 100, 100, 100, 100)
monster_select = int(input('몬스터 선택해주세요'))
monster_list = [
Monster('주니어바록', 100, 10),
Monster('바록', 100, 10),
Monster('주니', 100, 10),
]
monster_dict = {i: x for i, x in enumerate(monster_list, 1)}
monster = monster_dict[monster_select]
위에 방법처럼 할 필요 없이 딕셔너리로 잘 선언해준다면
monster_select = input()
if monster_select in monster_dict.keys():
monsger = monster_dict[monster_select]
로 짤고 몬스터 편하게 만들 수 있다.
 
input은 기본적으로 문자열로 출력이된다. int로 바꿔줘야 알아먹는다. 딕셔너리의 1이 int니까.
def action1():
print("action1")
def action2():
print("action2")
2
a = {
1: action1,
2: action2,
}
user_input = int(input())
a[user_input]()
딕셔너리 키 밸류 출력하기.
print(a.value()) 키 값만 출력
print(a.keys()) 밸류 값만 출력
print(a.items()) 키, 밸류값 출력
rich : 터미널 출력을 예쁘게 해주는 기능
logging : 소프트웨어가 실행 될 때 발생하는 이벤트를 추적하는 수단.
리치와 로깅을 같이 쓰면 더 예쁘게 출력 된다. 이 정도 까지만.
 
other.hp = max(other.hp - damage, 0)
이것의 뜻은 other의 hp는 other의 hp에서 damage를 뺀 값과 0이 최대라는 뜻이다. 음수로 떨어지지 않는다. 이게 더 안전한 방법이라고 한다. hp가 음수일 때 의도치 않는 결과가 나올 수 있기 때문이라고 한다.

Validation(밸리데이션) : 입력된 데이터가 유효한 데이터인지 검증하는 것을 말한다.

data = [2, 4, 3, 1, 5, 10, 9]
a = data.sort()
print(data)

sort는 sort하는 자체를 정렬한다. 리턴하지 않는다.

 

data = [2, 4, 3, 1, 5, 10, 9]
a = sorted(data)
print(a)

sorted는 값을 리턴한다. data가 바뀌지 않는다.

자료구조 : 자료를 효율적으로 관리하는 방법
자료를 잘 관리 하기 위해 상황에 맞춰 자료구조를 선택해서 자료를 관리하게 된다.
알고리즘 : 효율적으로 연산하는 방법
 

문법에 맞는 코드 VS 자료구조/알고리즘을 고려하는 코드

성능,용량,비용을 고려한 코드가 더 좋은 코드다.
자료구조와 알고리즘을 배우면 성능,용량,비용이 좋은 코드를 짤 수 있다.
 

취직을 하기 위해서는 코딩 테스트 준비를 큰 비중을 두고 준비.

코딩 테스트는 꾸준히 공부해야 실력이 는다.
  • 기초 학습
  • 핵심 개념
  • 문제 풀이 ( 퀄리티 있는 문제)
  • 양치기
 

기본적인 코드 작성 요령

  • 2를 저장한 변수 a 선언하기
a = 2
5의 4제곱을 코드로 표현해서 계산된 출력해보기
print(5**4)​
  • 분기문 작성해보기 ( 홀수 짝수 판별하기.)
if a % 2 == 0:
    print('짝수')
else:
    print('홀수')
  • [1,2,3]을 nums 배열에 담아 짝수만 출력
nums = [1, 2, 3]
for num in nums:
    if num % 2 == 0:
        print(num)​
  • 2346.7을 반올림 한 뒤 출력하
print(round(2346.7))​
1 2 3
4 5 6
7 8 9
  • 이차원 배열을 선언한 뒤 위와 동일하게 출력하기
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for arr in array:
    for ar in arr:
        print(ar, end=" ")
    print() #줄바꿈을 의미. 첫번째 for 문에서 123 줄바꿈 456 줄바꿈 789 줄바꿈을 의미함.
  • 단어 s의 가운데 글자를 반환하는 함수 만들기. 단어의 길이가 짝수라면 가운데 두글자 반환
s는 길이가 1이상, 100이하. abcde = c, qwer = we
이 문제를 풀려면 하나씩 문제를 쪼개서 생각해야한다. 그리고 하나씩 출력을 해보는 것도 좋다.
def middle(s):
    answer = ''
    if len(s) % 2 == 0:
        answer = s[len(s)//2-1] + s[len(s)//2]
    else:
        answer = s[len(s)//2]
    return answer
print(middle('qwerty'))
다차원 배열(2차원 배열), 문자열 다루기는 코테에 자주 출제.
다차원 배열이 중요한 이유는 자료구조, 정렬, 그래프 등 많이 쓰이기 때문.
매일 한 시간씩 알고리즘 문제를 풀고 생각이 잘 안 났다면 관련된 내용을 복습하면서 공부를 하면 좋다.
 

시간 복잡도 & 공간 복잡도

작성한 코드의 성능,용량을 판단하기 위한 척도
수행시간(성능)의 척도 = 시간 복잡도
10만개 중 어떤 값을 찾아라!
  • 최선일 경우 (best case) : 1번째에 찾는 경우 = 빅 -오메가 표기법
  • 보통일 경우 (average case): 5만 번째 찾는 경우 = 빅-세타 표기법
  • 최악의 경우 (worst case) : 10만 번째 찾는 경우 = 빅-오 표기법
  • 시간복잡도는 최악의 경우를 상정한다.
  • 빅 - 오 표기법은 O(빅오) 다음 숫자 또는 알파벳
  • 모든 코딩 테스트는 시간 제한이 있다. 즉 성능이 좋은 코드를 짜야한다는 뜻이다.
  • for문이 많이 겹쳐져 있지 않을수록 좋다.
  • 코테에서는 데이터의 수가 정해지고 시간 복잡도는 1억번에 1초니까 대략적으로 계산해서 코드를 짜도록 하자.

메모리 사용량의 척도 = 공간 복잡도

코드가 실행되면서 적은 공간을 사용해야 좋다.

배열

배열이 있으면 메모리에 차례대로 저장이 되고 인덱스도 차례대로 정해진다.
  • 배열은 프로그래밍 시 가장 많이 사용 되는 자료구조.
  • 하나의 변수에 그룹핑해서 관리.
기능
  • 조회 성능이 좋다. O(1)
  • 삽입과 삭제도 O(1)
  • 정렬은 어떤 알고리즘을 사용하느냐에 따라 시간복잡도가 다름.
  • 검색은 O(N). 왜냐하면 최악의 경우 모든 배열을 다 봐야하니까. 그래서 for문 하나가 O(N)이다. 정렬이 되어있는 배열은 O(log N)
  • 배열은 특정 원소를 삭제하거나 null로 만들어도 그 흔적은 그대로 남는다.
배열과 연결리스트는 비교하면서 기억하는게 좋다.

연결리스트

데이터가 꼬리에 꼬리를 물고 있는 형태를 말한다.
  • 데이터를 유동적으로 떼었다가 붙였다가 할 수 있는 자료구조.
  • 데이터가 저장되는 칸을 노드라고한다.
  • 맨 앞 노드는 head 끝 노드는 tail
  • 현재 노드가 가리키는 다음 데이터 칸을 포인터라고한다.
  • 현재 노드가 head라면 포인터는 두번째 칸이 된다.
기능
  • 배열은 조회가 빠르고 연결리스트는 삽입/삭제가 빠르다.
  • 검색은 O(N).

'자료구조 , 알고리즘' 카테고리의 다른 글

자료구조/ 알고리즘 특강: 2  (0) 2023.04.02

+ Recent posts