티스토리 뷰
연산 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 |
- Total
- Today
- Yesterday