[이코테 2021] 알고리즘 경향 분석 및 파이썬 문법 - 1
[이코테 2021] 알고리즘 경향 분석 및 파이썬 문법 - 1
모든 예시 코드는 Repl을 이용해서 확인해본다.
알고리즘 문제 해결 과정
- 지문 읽기 및 컴퓨터적 사고
- 요구사항(복잡도) 분석
- 문제해결을 위한 아이디어 찾기
- 소스코드 설계 및 코딩
아이디어 캐치 후 간결하게 소스코드를 작성할 수 있게 한다.
**수행시간 측정 코드
import time
start_time = time.time() # 측정 시작
# 프로그램 소스코드
end_time = time.time() # 측정 종료
print("time", end_time - start_time)
파이썬 - 자료형
문자열, int형, 등 C언어의 자료형을 따로 선언할 필요없이 넣을 수 있다.
파이썬의 자료형으로는 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등이 있다.
- 정수형
a = 1000
print(a)
a = -7
print(a)
a = 0
print(a)
- 실수형
a = 157.93
print(a)
a = -1837.2
print(a)
a = 5.
print(a)
a = -.7
print(a)
- 지수 표현 방식
a = 1e9 #1,000,000,000의 지수 표현 방식
print(a)
a = 75.25e1
print(a) #752.5
a = int(1e9)
print(a) #1,000,000,000의 정수 표현 방식
a = 3.141592
print(format(a, ".2f")) #소수점 둘째자리까지 반올림
- 실수형을 표현할 때 문제점이 있는 데, 소수점 사이의 계산을 할 때 컴퓨터는 그 값을 완벽하게 표현할 수 없다. 메모리에 소수점에 ‘가깝게’ 저장할 뿐 오차는 생긴다. –> 해결법은 round()함수를 이용해서 반올림을 한다.
a = 0.3 + 0.6
print(a)
if a == 0.9:
print(True)
else:
print(False)
# False가 나온다.
print (round(a, 4))
if round(a,4) == 0.9:
print(True)
else:
print(False)
# True가 나온다.
연산자
- 2**3 = 8 #거듭제곱
- 5%3 = 2 #나머지
- 5//3 = 1 #몫
- 5/3 = 1.666667 #실수 (몫 + 나머지)
- abs, pow, max, min, round ..
- math 라이브러리 이용 가능 from math import * (floor, ceil, sqrt.. )
list 자료형
여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
- C, 자바에서의 배열(Array)의 기능 및 연결 리스트와 유사한 기능
- C++의 STL vector
- list는 배열(array), 테이블(table)로 불리기도 한다.
-
인덱싱과 슬라이싱
- 초기화 방식 : list(), []
- 원소 접근(인덱싱) : 인덱스 값 괄호에 넣기
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a) print(a[3]) print(a[-2]) n = 10 a = [0] * n print(a)
- 슬라이싱 : 리스트에서 연속적인 위치를 갖는 원소들을 가져올 때 쓰는 방법
- 대괄호 안에 콜론 (:)을 넣어서 시작 인덱스와 끝 인덱스를 설정
끝 인덱스는 실제 인덱스보다 1을 더 크게 설정.
- 대괄호 안에 콜론 (:)을 넣어서 시작 인덱스와 끝 인덱스를 설정
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a) print(a[1 : 4])
- 초기화 방식 : list(), []
-
리스트 컴프리핸션 : 리스트를 초기화하는 방법 중 하나
- 대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화
array = [i for i in range(10)] print(array) array = [i for i in range(20) if i % 2 == 1] print(array) #홀수 값만 나온다.
- 2차원 리스트를 초기화할 때 효과적으로 사용
array = [[0] * m for _in range(n)] print(array)
** 주의할 점 : 다음과 같이 초기화 할 경우 [[0]*m] 자체를 하나의 객체로 인식됨! 쓰지말 것
array = [[0] * m ] * n print(array) array[1][1] = 5 # 여기서 모든 1행 1열의 값이 5로 바뀐다.
- 언더바(_)는 언제 쓰일까? : 반복을 수행하되 반복되는 변수의 값을 무시하고자 할 때 쓰인다.
for _ in range(5): print("Hello World")
-
리스트 관련 메소드
append() / sort() / reverse() / insert() / count() / remove()
문자열 자료형
-
문자열은 큰 따옴표(“”) 작은 따옴표(‘’) 모두 문자열 출력이 가능하다
문자열 안에 큰 따옴표를 넣고 싶을 때, 작은 따옴표 이용 반대로도 가능 -
문자열 변수에 덧셈(+)을 이용해서 문자열을 연결시킬 수 있다. 문자열에 양의 정수를 곱하는 경우, 문자열이 그 값만큼 더해진다. 인덱싱과 슬라이싱 이용 가능 but, 특정 인덱스의 값 변경 불가
-
문자열을 아스키 코드로 바꿔 표현하는 법 : ord / 반대 : chr
a = "Hello" b = "World" print(a+ " " + b) print(a, b) a = "String" print(a*3) a = "ABCDEF" print(a[2:4]) a[2] = "b" # 문자열에서는 인덱스의 값 변경 불가
튜플 자료형
- 튜플 자료형은 리스트와 유사하지만 문법적 차이가 있다.
- 한 번 선언된 값을 변경할 수 없다.
- 소괄호(())를 이용한다.
- 튜플은 리스트에 비해 상대적으로 공간 효율적이다.
a = (1, 2, 3, 4, 5)
print(a)
print(a[2:5])
a[2] = 5 # 튜플은 변경할 수 없다.
- 튜플의 좋은점?
- 서로 다른 성질의 데이터를 묶어서 관리해야 할 떄
- 최단 경로 알고리즘에서는 (비용, 노드번호)의 형태로 튜플 사용
- 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때 (사전, 집합에서 쓰임)
- 튜플은 변경이 불가하므로 키값으로 사용 가능
- 리스트보다 메모리를 효율적으로 사용할 떄
- 서로 다른 성질의 데이터를 묶어서 관리해야 할 떄