Alogorithm

Python으로 코테 공부 하기 기본 문법 - 자료형

규몽 2020. 11. 13. 16:05

 

일주일 전 쯤 우테코 코딩테스트를 통해 생애 첫 코테를 경험하고 알고리즘 공부를 시작해야겠다 생각이 들어

서점에가 책을 구입했다. 

 

인터넷에서 조언을 구해 "이것이 코딩 테스트다 with 파이썬"이란 책을 구매 했는데 JS말고 파이썬으로 코테 알고리즘 공부를 할 생각이다!

 


JS 문법만 공부하던 내가 파이썬을 공부하며 JS와 다른 내 스스로 몰랐던 파이썬 문법을 정리해 끄적일 것이다!

 

자료형

 

파이썬에서 역시 이와 같은 에러가 있다.

 

 

a = 0.3+0.6
if a == 0.9:
print(True)
else:
print(False)
// False
view raw 1.py hosted with ❤ by GitHub

 

원하는 결과를 얻고 싶으면 round( ) 함수를 이용하면 된다.

round( ) 함수를 호출할 때는 인자를 넣는데 첫 번째 인자는 실수형 데이터이고, 두 번째 인자는 반올림하고자 하는 위치 -1 이다. 두번째 인자 없이 인자를 하나만 넣을 때는 소수점 첫째 자리에서 반올림한다.

 

ex)

 

 

a = 1.235345
print(round(a,4)) // 1.2353
view raw 1.py hosted with ❤ by GitHub

 

수 자료형의 연산

 

파이썬에서 몫을 구할 때에는 몫 연산자(//)를 이용한다.

 

 

print(7//3) // 2
view raw 1.py hosted with ❤ by GitHub

 

리스트 자료형

 

나는 쉽게 js의 배열이라 이해했다. 파이썬의 리스트 자료형은 배열 기능을 포함하고 있으며, 내부적으로 연결 리스트 자료구조를 채택하고 있어서 append( ), remove( ) 등의 메서드를 지원한다.

 

파이썬의 빈 리스트 선언 방법은 아래 2가지가 있고 크기가 N인 1차원 리스트를 초기화 할땐 다음 방식으로 하면 편리하다.

 

 

a =list()
print(a) // []
b=[]
print(b) // []
# 크기가 n이고 모든값이 0인 1차원 리스트
n = 3
v= [0] *n
print(v) // [0,0,0]
view raw 1.py hosted with ❤ by GitHub

 

리스트의 인덱싱과 슬라이싱

 

파이썬은 인덱스값에 양의 정수와 음의 정수 모두 사용할 수 있으며, 음의 정수를 넣으면 원소를 거꾸로 탐색한다.

또 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용할 수 있다.

이때는 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 (끝 인덱스 -1)을 설정할 수 있다.

 

 

a = [1,2,3,4,5,6,7]
# 두번째 원소에서 네 번째 까지
print(a[1:4])
view raw 1.py hosted with ❤ by GitHub

 

리스트 컴프리헨션

 

나는 이부분이 조금 낯설었는데 리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다.

대괄호안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화 할 수 있다.

i for i in range(n) << 이 i는 n까지 반복한다 같은 뜻으로 이해했다.

 

 

# 0 부터 10까지 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(11) if i %2 ==1]
print(array)
# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
ary = [i* i for i in range(1,10)]
print(ary)
view raw 1.py hosted with ❤ by GitHub

 

리스트 컴프리헨션으로 2차원 리스트를 초기화

 

여기서 언더바(_)는 파이썬 자료구조/알고리즘에서 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용한다.

 

 

# n * m 크기의 2차원 리스트 초기화
n =3
m= 2
array=[[0] *m for _ in range(n)]
print(array) // [[0,0], [0,0], [0,0]]
view raw 1.py hosted with ❤ by GitHub

 

리스트 관련 메서드

JS에서는 remove 함수를 사용할 경우 그 값만 사라지고 자리엔 undefined가 남았는데 파이썬은 그렇지 않다.

내림차순 정렬 같은 경우도 sort( ) 함수안에 조건식이 아닌 reverse = True로 처리하는점이 다르단 걸 느꼈다.

또 특정 인덱스에 insert(a,b) 함수로 a번째에 b를 추가하고, 특정 값인 데이터 개수를 셀 때는 a.count(value)로 세는게 JS랑 달라서 신선하다.

 

 

a = [1,2,3]
print("기본 메서드: ",a) // [1,2,3]
# 리스트에 원소 삽입
a.append(4)
print("삽입: ",a) // [1,2,3,4]
# 오름차순 정렬
a.sort()
print("오름차순: ",a) // [1,2,3,4]
# 내림차순 정렬
a.sort(reverse = True)
print("내림차순: ",a) // [4,3,2,1]
# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기: ",a) // [1,2,3,4]
# 특정 인덱스에 데이터 추가
a.insert(2,3)
print("인덱스 2에 3 추가: ",a) // [1,2,3,3,4]
# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: " ,a.count(3)) // 2
# 특정 값 데이터 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a) // [2,3,3,4]
view raw 1.py hosted with ❤ by GitHub

 

참고로 insert( ), remove( ) 함수는 시간 복잡도가 O(N)이라 남발하면 안된다.

 

파이썬에서 특정한 값의 원소를 모두 제거하는 방법

a에 포함된 원소를 하나씩 확인하며 그 원소가 b에 포함되어 있지 않았을 때만 리스트 변수인 result에 넣겠다는 의미다.

 

 

a=[1,2,3,4,5,5]
b =[3,5]
#remove_set에 포함되지 않는 값만을 저장
result=[i for i in a if i not in b]
print(result) // [1,2,4]
view raw 1.py hosted with ❤ by GitHub

 

문자열 자료형

 

JS에서 다른점은 아래와 같다.

JS에서는 문자형 더하기 숫자는 숫자가 문자형으로 자동 변환 되어서 더해졌는데 파이썬에선 그렇지 않고 또

문자열 곱하기 숫자는 JS에서는 NaN, 파이썬에서는 문자열이 n번 만큼 반복된다.

 

a ="mingyu"
print(a*3) // "mingyumingyumingyu"
b="mingyu"
print(b+3) // error
view raw 1.py hosted with ❤ by GitHub

 

튜플 자료형

 

튜플 자료형은 이번에 처음 알게된 말이라 잘 이해가 되지않는데 특징은 아래와 같다.

 

튜플은 한 번 선언된 값을 변경할 수 없다.

리스트는 대괄호를 이용하지만 튜플은 소괄호( ) 를 이용한다.

 

튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다.

 

사전 자료형

 

사전 자료형은 키와 값의 쌍을 데이터로 가지는 자료형이다.

데이터 검색 및 수정에 있어서 리스트보다 훨씬 빠르게 동작한다.

 

키 데이터만 뽑아서 리스트를 뽑을 때는 keys( ) 함수를, 값 데이터를 뽑아서 리스트로 이용할 때는 values( ) 함수를 이용한다.

 

data = dict()
data['사과'] = "apple"
if '사과' in data:
print("사과가 있어요") // 사과가 있어요
view raw 1.py hosted with ❤ by GitHub

 

집합 자료형

 

파이썬에서는 집학을 처리하기 위한 집합 자료형을 제공하고 아래와 같은 특징이 있다.

 

중복을 허용하지 않는다.

순서가 없다.

 

리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다. 그리고 집합 자료형은 키가 존재하지 않고, 값 데이터만 담게 된다.

 

집합 자료형은 set( ) 함수를 이용하거나, 중괄호 안에 각 원소를 콤마를 기준으로 구분해서 넣으면 된다.

 

 

data = set([1,2,3,4,4,5])
print(data) // {1,2,3,4,5}
data = {1,1,1,2,3,4}
print(data) // {1,2,3,4}
view raw 1.py hosted with ❤ by GitHub

 

 

집합 자료형의 연산으로는 합집합, 교집합, 차집합 연산이 있고 합집합은 " | ", 교집합은 " & ", 차집합은 " - " 을 이용한다.

 

관련 함수로는 하나의 데이터를 추가할 때는 add( ) 함수를, unpdate( ) 함수는 여러 개의 값을 추가할 때, 

특정 값을 제거 할 때는 remove( ) 함수를 사용한다.