230508 알고리즘/자료구조 - 파이썬 강의 1차시
파이썬 기초 개념
- 파이썬 설치하기 https://www.python.org/downloads/
- IDLE: 파이썬 콘솔(콘솔 창은 저장x. 간단하게 보기 좋다)
- 파이참 설치하기 https://www.jetbrains.com/ko-kr/pycharm/download/#section=mac
- 파이썬 공식 문서 (https://docs.python.org/ko/3/)
- Python Tutor (https://pythontutor.com/)
print("Hello World!")파이썬: 매우 쉽고 간결하다는 장점
- 주석은
#을 이용하여 작성한다.ctrl + /단축키를 사용하면 한 줄을 주석으로 만들 수 있다.)
프로세스
- 1) 입력
- 2) 처리
- 제공받은 자료 구조화: 어떻게 저장할 것인지
- 처리 로직: 어떻게 쓸 것인지- 3) 출력
알고리즘 = 컴퓨터에게 복잡한 조건으로 계산을 시키는 것
파이썬 자료형
- 왜 자료형이 나뉘어야 할까?
- 다양한 정보를 컴퓨터에게 주고, 코드의 로직에 따라 계산시키기 위함.
문자열
- 공백과 빈 문자열 주의 - 엄연한 문자열이다.
- 따옴표 안의 따옴표를 표시할 경우 서로 다르게
- 숫자 123과 '123'은 다르다.
참고) 'a' > 'c' # False * 아스키 코드 때문 * sorting도 된다. ord('a') 함수 안에 넣으면 아스키 코드 값을 알려줌Boolean
형변환
- 명시적 형변환 - int(): 단, 정수로 변환될 수 있는 형식일 때만 가능하다. - 실수형(float) => int: 버림일 때 사용 가능 - float() - str() - 강제 형변환 => True -> 1, False -> 0 으로 변환된다.
할당 연산자
할당 연산자
=를 통해 변수에 각기 다른 자료형을 담아 표현 가능
할당 연산자는 변수가 할당된 객체의 주솟값을 가리킨다!!name = 'alex' # 이름에는 문자열을, age = 3 # 나이에는 숫자를, license = True # 운전면허 보유여부에는 진리값을 할당 가능
- 할당 연산자 왜 쓰는가?
: 메모리 안의 객체 주소값 때문
- 메모리 안에, 주소값을 포인팅
- 왼쪽의 값이 즉 오른쪽 값의 메모리 주소값을 가리킨다.
- 변수를 사용하는 이유?
: 개발자들에게 메모리에 직접 제어를 허용하지 않기 위해. 남의 컴퓨터 망가뜨리지 않기 위해
- 돌리는 환경에 따라 다른 주솟값을 가지게 되므로 안전해진다.
id() # 메모리 주소값 a = [1,2,3], b = [1,2,3]일 때 id(a) ,id(b) => 서로 다른 메모리 주소값이 나온다. a == b #True a is b #False
a = [1,2,3] b= [1,2,3] c = a # c도 a의 메모리 주소 할당 a[0] = 99 b[0]= 100![]()
실제 자료구조들은 리스트, 딕셔너리, 튜플뿐만 아니라 그리고 여러 자료구조를 섞어 표현할 수 있음을 기억하자.
: 배우는 이유? 데이터를 쉽게 조작하기 위해서!
.append(x)
- 리스트의 맨 마지막에 새로운 원소 x를 삽입
.pop()
- 리스트의 맨 마지막 원소를 삭제 후 반환
.pop(i)
- 리스트의 i번째 원소를 삭제 후 반환
- 맨 앞 원소 빼기 :
.pop(0)
파이썬에서 리스트로 스택, 큐, 트리 표현이 가능하다.
스택
후입 선출 구조: 마지막에 들어온 것이 먼저 나간다.
: 리스트 신규 데이터의 삽입과 추출은
append(),pop()로 구현이 가능하다.
예) 크롬 뒤로가기 - 시스템 스택에서 pop
큐
선입 선출 구조: 먼저 들어온 것이 먼저 나간다.
: 리스트 신규 데이터의 삽입과 추출은
append(),pop(0)로 구현이 가능하다.
- 우선순위 큐: 높은 우선순위를 가지는 경우 먼저 처리한다.
input(): 사용자의 입력을 받는다.파이썬의 내장함수 input()을 사용하면 터미널에서 사용자 입력을 받을 수 있다.
파이썬: 인터프리터 언어 (Interpreter Language)
- 한줄 한줄 읽는다.
- 입력은 터미널에 줘야한다.
- 터미널에 입력을 해야 코드라인에 들어감.
- print는 코드라인에 있지만 터미널에 출력되는 것.
아무것도 출력하지 않고 한 줄만 띄우고 싶다면 print()라고만 작성
print(end=" ") : end 옵션을 지정할 수 있다. 디폴트는 \n라서 개행 print(a,b) : 여러개 프린트도 가능
할당 연산자의 왼/오른쪽이라고 생각하면 쉽다.
변수명(식별자) 작성 규칙
1) 알파벳, 언더바(_), 숫자로 구성되어야 한다. # number, my_note, car1
2) 첫 글자에는 숫자가 올 수 없다. # 1car는 불가능
3) 대소문자를 구별한다. # 변수 a와 변수 A는 서로 다른 변수
4) 띄어쓰기가 필요한 경우 언더바(_)로 구분한다.
# 식별자에는 공백이 있으면 안되므로 my_list 와 같은 식으로 공백을 표현
5) 예약어로 지을 수 없다.
참고) LEGB 규칙
파이썬에서 변수에 값을 바인딩하거나 변수의 값을 참조하는 경우 LEGB 규칙을 따른다.
L Local의 약자로 함수 안을 의미
E Enclosed function locals의 약자로 내부함수에서 자신의 외부 함수의 범위
G Global의 약자로 함수 바깥 즉, 모듈 범위
B Built-in의 약자로 open, range와 같은 파이썬 내장 함수들을 의미
x,y = 10,20
swap 코드 또한 매우 간단하게 쓸 수 있다.
x = 3
y = 4
x, y = y, x
x # 4
y # 3
print(a / b) # 5 나누기 2 (항상 결과는 float 타입임을 주의하자!!!)
4 / 2 => 2.0
******부동소수점 오차 때문에 나눗셈 연산에서 오류가 날 수 있다.
부동소수점: 실수를 표현할 때 소수점의 위치를 고정하지 않는 것
=> 4 // 2 # 2
: 오류를 방지하려면 이렇게 사용해야 한다.
결과값은 boolean
print(3 and 4) # 4
print(0 and 4) # 0
print(4 or 3) # 4
print(0 or 8) # 8
트리
간선 개수 = 노드 개수 -1
: n개의 노드를 가진 이진트리는 n-1개의 간선을 가진다.
왼쪽: 2n
오른쪽: 2n + 1, 자식 -> 부모로 갈 경우: 2로 나눈 몫