#### <내가 다시 보기 위한 파이썬 문법 공부>
수 자료형은 코딩 테스트에서 가장 기본적인 자료형임
실제로 코딩테스트에서도 대부분의 경우 정수형을 다루는 문제가 많이 출제
정수형은 정수를 다루는 자료형이며 정수형에는 양의 정수, 음의 정수 , 0이 있다.
실수형 Real Number
/ => 나누기
% => 나머지
// => 몫332
#정수형
a = 1000 # 양의 정수
print(a)
a = -7 #d 음의 정수
print(a)
a = 0
print(a)
#실수형
a = 157.93
a= -1837.2
#소수부가 0일때 0을 생략
a = 5.
print(a)
#정수부가 0일때는 0을 생략
a = -.7
print(a)
a = 1e9
print(a)
a = 75.25e1
print(a)
a = 3954e-3
print(a)
*리스트 만들기
대괄호 안에 원소를 넣어 초기화하며, 쉼표로 원소를 구분함.
인덱스로 접근가능
a = [1, 2, 3, 4, 5, 6, 7]
print(a[4])
a = list()
a = []
tip) 코딩 테스트에서 주로 크기가 N인 1차원 리스트를 초기화해야 하는데 다음 방식으로 초기화하면 편리하다.
크기가 N 이고, 모든 값이 0인 1차원 리스트를 초기화
리스트를 초기화 하는 여러방법 중 하나이다.
=> 대괄호 안에 조건문과 반복문을 넣는 방식으로 초기화할 수 있다.
tip) 이러한 리스트 컴프리 핸션은 코테에서 2차원 리스트를 초기화할때 매우 효과적으로 사용됨
example코드 잘확인 몰랐던 것!
파이썬 자료구조/알고리즘에서 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할때 언더바(_)를 사용함.
ex)
summary = 0 for _ in range(5) :
for i in range(1, 10): print("hello world")
summary += i
print(summary)
*리스트 관련 기타 메소드 example 코드 확인
*파이썬에는 없는 remove_all()같은 함수 구현 exampel 코드 확인
=> 집합과 not in 사용
*문자열 초기화
문자열 안에 "" or ''를 이용.
백슬래쉬를 사용하면, 큰따옴표나 작은따옴표를 문자열에 원하는 만큼 포함시킬 수 있다.
*문자열 연산 => 1)" + "를 사용.. 단순히 문자열이 더해져서 연결됨.
2) 문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해진다.
3) 파이썬 문자열은 내부적으로 리스트와 같이 처리(인덱싱과 슬라이싱 가능)
1)튜플은 한 번 선언된 값을 변경할 수 없다.
2)리스트는 []를 이용하지만, 튜플은 소괄호()를 이용함.
ex) 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘의 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않는다. 그래서 그 우선순위 큐에 들어가는 데이터를 튜플로 구성하여 소스코드를 작성한다.
사전 자료형
1)키(key)와 값(value)의 쌍을 데이터로 가지는 자료형이다. 앞서 다루었던 리스트나 튜플은 값을 순차적으로 저장한다는 특징이 있다.하지만 사전 자료형은 키-값 쌍을 데이터로 가진다는 점에서, 우리가 원하는 변경 불가능한 데이터를 키로 사용할 수 있다.
2) 파이썬의 사전자료형은 내부적으로 해시 테이블(HashTable)을 이용하므로 기본적으로 데이터의 검색 및 수정에서 있어서 O(1)의 시간에 처리할 수 있다.
3) 사전 자료형을 이용하는 경우 -> 사전 자료형에 특정한 원소가 있는지 검사하는,,! "원소 in 사전"의 형태를 사용할 수 있다.
*사전 자료형 관련 함수
1) 키 데이터만 담은 리스트 => data.keys()
2) 값 데이터만 담은 리스트 => data.values()
1) 중복을 허용하지 않음
2) 순서가 없다
ex)학생 번호가 주어졌을때 해당 학생이 선택되었는지 여부를 출력하는 문제 => 특정 데이터가 이미 등장한 적이 있는지를 체크할때 매우 효과적
합집합, 차집합, 교집합
조건문을 작성할 때는 코드의 블록을 들여쓰기로 설정한다는 점을 기억
*비교 연산자, 논리연산자, in & not in 연산자
*pass문 : 조건문의 값이 참이라고 해도, 아무것도 처리하고 싶지 않을 때 pass문을 이용
*조건문에서 실행될 코드가 한 줄인 경우, 굳이 줄 바꿈을 하지 않고도 간략하게 표현 수 있다.
*조건부 표현식을 이용하면 if - else문을 한 줄에 작성해 사용할 수 있다.
score = 85
result = "Success" if score >= 80 else "Fail"
특히, 리스트에 있는 원소의 값을 변경해서, 또 다른 리스트를 만들고자 할 때 매우 간결하게 사용 가능
ex)리스트에서 특정한 원소의 값만을 없앤다고 해보자.
a = [1,2,3,4,5,5,5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set]
tip) 다른 언어와 달리 파이썬은 조건문 안에서 수학의 부등식을 그대로 사용 가능
x = 15 x = 15
if x > 0 and x < 20 : if 0< x < 20 :
위의 2개의 식이 같음.
3.반복문
보통 for문을 더 자주 사용함. 코드의 수가 줄어들음.
for문 사용시 수를 차례대로 나열할 때는 range()를 주로 사용함.
range(시작 값, 끝 값 + 1) 형태로 쓰인다.
range(값) : 자동으로 0부터 시작, 끝 값 +1
*continue 문 사용
def 함수명(매개변수):
실행할 코드
return 반환 값
*함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우
=> global 함수를 사용
해당 함수에서는 지역변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.
a = 0
def func():
global a
a += 1
for i in ragne(10):
func()
*람다 표현식도 가능
print((lamda a, b:a+b)(3,7)
문자열을 띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저정하는 코드
<입력>
=>list(map(int, input().split))
: 가장 먼저 input으로 입력받은 문자열을 split를 사용해서 공백으로 나눈 리스트로 바꾼 뒤에, map을 이용하여 해당 리스트의 모든 원소애 int() 함수를 적용핞다. 최종적으로 그 결과를 list()로 다시 바꿈으로써 입력받은 문자열을 띄어쓰기로 구분하여 각각 숫자 자료형으로 저장하게 되는 것이다.
if) 입력을 받아야하는 데이터의 개수가 많지 않다면
n, m, k = map(int, input().split())
if) 입력을 최대한 빠르게 받아야 하는 경우
import sys
sys.stdin.readline().rstrip()
<출력>
answer = 7
print("정답은" + answer + "입니다.")
오류!
so)
print("정답은" + str(answer) + "입니다.")
print("정답은" , str(answer) , "입니다.")
print(f"정답은 {answer}입니다.")
1)내장함수
2)itertools
3)heapq
4)bisect
5)collections
6)math
*내장함수
파이썬에서 별도의 import 명령어 없이 바로 사용할 수 있는 내장 함수
example코드 확인
*itertools
-> 코테에서 가장 잘 쓰이는 건
permutaions, combinations 순열과 조합
permutaions : 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다.
*heapq
힙 기능을 위해 heapq라이브러리를 제공. => 우선순위 큐 기능을 구현하고자 할 때 사용됨.
파이썬의 힙은 최소 힙으로 구성되어 있으므로 단순히 원소를 힙에 넣었다가 빼는 것만으로도 시간 복잡도O(NlogN)에 오름차순이 정렬이 완료.
보통 최소 힙 자료구조 최상단 원소는 항상 "가장 작은 원소"이기 때문이다.
파이썬에서는 최대힙을 제공하지 않음 => 따라서 최대힙을 구현해야 할 때는 원소의 부호를 임시로 변경하는 방식을 사용한다. 힙에 원소를 삽입하기 전에 잠시 부호를 바꾸었다가 , 힙에서 원소를 꺼낸 뒤에 다시 원소의 부호를 바꾸면 된다. code확인
*biset
-이진 탐색을 쉽게 구현할 수 는 라이브러리
-정렬된 배열에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용된다.
biset_left(a, x) = 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
biset_right(a, x) = 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드