티스토리 뷰

코딩테스트 준비

필요한 Python 문법 정리

땅속 디그다 2022. 3. 21. 22:15

연산 10억번 넘어가는 것 같으면 그건 잘못 되었다.

 

코드 연산시간 측정해보기 

import time
start_time = time().time() #측정 시작
#
#프로그램 소스코드
#
end_time = time.time() #측정 종료
print("time:", end_time - start_time) #수행 시간 출력

파이썬 자료형 보기

1. 문자열

문자열 변수를 초기화 할 때는 ", ' 를 사용

"를 쓸때는 '를 포함 가능 하고 "를 표현하고 싶으면 \를 앞에 두어 \"로 사용한다.

문자열 변수에 덧셈을 이용하면 Concatenate 가 된다. 양의 정수를 곱하는 경우 그 값만큼 여러 번 더해진다.

문자열에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있다.( 단 특정 인덱스 값을 변경할 수는 없다.)

예를 들어

a = "abc"

a[2] = "d"

이런 식으로 접근은 불가능 하다는 말이다

1) 슬라이싱 

# 슬라이싱을 한다고 해서 그 값을 담고있는 변수의 값이 변경되지 않는다
a = "Hello"
print(a[1:4])  # 결과 ell 인덱스 1~3까지 출력

#결과를 담고 싶다면 다른 변수 초기화로 사용
b = a[1:4]

2. 리스트

여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형이다.

- 사용자 입장에서 C나 자바에서의 배열(Array)의 기능 및 연결 리스트와 유사한 기능을 지원

- C++의 STL vector와 기능적으로 유사 JAVA에서는 List<Object>라고 생각해보기

- 리스트 대신 배열 혹은 테이블이라고 부르기도 한다.

   1) 초기화 방법 -> 리스트 컴프리헨션 사용하기

# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화 하기
N = 10
A = [0] * N

# 리스트 컴프리헨션 사용하여 0부터 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i%2 == 1]
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트 + 3의 배수
array = [i for i in range(20) if i%2 == 1 if i%3 == 0]
# 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1, 10)]
# 튜플 만들기
array = [(x, y) for x in ['A', 'B'] for y in ['C', 'D']]

# 2차원 배열 ( n * m )
array = [[0] * m for _ in range(n)]

리스트 컴프리핸션은 if 문을 지원하며 for 문 여러개 넣을 수도 있다.

   2) 리스트의 주요 메서드 살피기

함수명 사용법 설명 시간 복잡도
append() 변수명.append() 리스트에 원소를 하나 삽입할 때 사용한다. O(1)
sort() 변수명.sort() 오름차순으로 정렬 O(NlogN)
변수명.sort(reverse=True) 내림차순으로 정렬 O(N)
reverse() 변수명.reverse() 리스트의 원소의 순서를 모두 뒤집음 O(N)
insert() 변수명.insert(삽입할 위치 인덱스, 삽입 할 값) 특정한 인덱스 위치에 원소를 삽입 O(N)
count() 변수명.count(특정 값) 리스트에서 특정한 값을 가지는 데이터의 갯수 세기 O(N)
remove() 변수명.remove(특정 값) 특정한 값을 갖는 원소를 제거 값을 가진 원소가 여러개면 하나만 제거 O(N)
# 어떤 리스트에서 특정값 없는 리스트로 추출하기
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set]

 

3) 접근 방식

마찬가지로 인덱싱으로 접근이 가능하며 슬라이싱 또한 사용이 가능하다

3. 튜플

리스트와 유사하지만 다르다

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

리스트는 대괄호를 사용하지만 튜플은 소괄호를 사용한다

튜플은 리스트에 비해 상대적으로 공간 효율적이다.

주로 어디에서 사용? =>

1) 서로 다른 성질의 데이터를 묶어서 관리 해야 할때 

ex) (비용, 노드 번호) 

 

2) 데이터의 나열을 해싱의 키값으로 사용해야 할때

ex) 딕셔너리의 키값으로 사용 될 수도 있다.

 

3) 리스트보다 메모리를 효율적으로 사용가능

# 튜플 선언
a = (1, 2, 3, 4)
print(a[1:]) #결과 (2,3,4)

접근방식 -> 슬라이싱, 인덱싱 모두 사용이 가능하다

4. 딕셔너리

사전 자료형은 Key-Value 쌍으로 데이터를 가지는 자료형 Map이라고 보면 된다.

Key는 변경 불가능한 자료형을 키로 사용할 수 있다.

해시 테이블을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리가 가능하다.

초기화 할때 dict()를 이용한다.

## 딕셔너리 자료형
data4 = dict()
data4[('apple', 'fruit')] = "apple"
data4['사과'] = "apple2"
data4['사과'] = "apple3"
data4['배'] = "pear1"

print(data4)
함수명 사용방법 설명
keys() 변수.keys() 키 데이터만 담은 리스트 반환
values() 변수.values() 값 데이터만 담은 리스트 반환

5. 집합

중복을 허용하지 않는다

순서가 없다

집합은 리스트 혹은 문자열을 이용해서 초기화 할 수있다.

=> 이때 set 함수를 이용 혹은 중괄호 이용

함수명 (연산자) 사용방법 설명
| 또는 union() a | b / a.union(b) 합집합
& 또는 intersection a & b / a.intersection(b) 교집합
- 또는 difference a - b / a.difference(b) 차집합
add() add(추가할 원소) 새로운 원소 추가
update() update(list) 새로운 원소 여러개 추가
remove() remove(삭제할 원소) 특정한 값을 가지는 원소 삭제

다양한 메서드

많은 양의 input을 받을 때 ( 사용자로부터 입력을 최대한 빠르게 받아야하는 경우)

# 많은 양의 문자열을 받을 때 strip을 통해서 \n 을 제거한다.
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

pass -> 아무것도 처리하고 싶지 않을 때 pass 키워드를 사용합니다.

range(시작 값, 끝 값)

cotinue

break

global 키워드

다양한 연산자

비교 연산자

==, !=, >, <, >=, <=, < <

 

논리 연산자

and, or, not, in, not in

 

람다 표현식 

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
def my_key(x):
	return x[1]
    
print(sorted(array, key=my_key))
print(sorted(array, key=lambda x: x[1])

순열과 조합

itertools 를 이용

'코딩테스트 준비' 카테고리의 다른 글

백준 1043 - UNION FIND  (1) 2022.04.11
자료구조 - 우선순위 큐  (0) 2022.04.07
댓글
04-09 22:54
Total
Today
Yesterday
링크