1. 컴퓨터는 2진수 체계이기 때문에 실수 덧셈을 정확히 하지 못한다. 보통 5째 자리에서 반올림 하면된다.
a = 0.3 + 0.6
print(rount(a,4))
2. 거듭 연산자
a ** b # a의 b승
3. 자료형 변환
char ch = 'a'+1; # 자바
ch = chr(ord('a')+1) # 파이썬
4. 입력
# N개의 정수를 한 줄로 입력 받아 List에 저장할 경우
data = list(map(int, input().split()))
# N개의 정수를 여러 줄에 걸쳐 입력 받아 List에 저장할 경우
N = int(input())
data = [int(input()) for _ in range(N)]
# N개의 문자열을 여러 줄에 걸쳐 입력 받아 List에 저장할 경우 <- 중요!(문자열의 뒤에 \n 제거하기 위해 .strip() 추가)
N = int(input())
data = [input().rstrip() for _ in range(N)]
# N개의 정수를 여러 줄에 걸쳐 입력 받아 이차원 배열에 저장할 경우.
N = int(input())
matrix = [list(map(int, input().split())) for _ in range(N)]
5. 출력
month = 1
day = 10
print(f'2020년 {month}월 {day}일')
6. 진수
# 2진수 변환
bin(42) #'0b101010'
# 8진수 변환
oct(42) #'0o52'
# 16진수 변환
hex(42) #'0x2a'
# 2진수
int('0b101010', 2) #42
# 8진수
int('0o52', 8) #42
# 16진수
int('0x2a', 16) #42
7. 사전 자료형
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
# 자료를 삭제 하고 싶을시 del(dict['사과'])함수를 사용한다.
del(dict['사과']) # data 에서 사과 삭제
# 자료를 삭제 + 반환 시 pop('사과') 함수를 사용한다.
data = dict.pop('사과') # data에서 사과 삭제 및 반환
8. 집합 자료형
# 집합 자료형 초기화 방법
a = set([1,2,3,4,5])
b = {3,4,5,6,7}
a | b # 합집합 {1,2,3,4,5,6,7}
a & b # 교집합 {3,4,5}
a - b # 차집합 {1,2}
# 새로운 원소 추가
data.add(4)
# 새로운 원소 여러 개 추가
data.update([5,6])
# 특정한 값을 갖는 원소 삭제
data.remove(3)
9. 리스트
# 1부터 100까지 리스트 만들기
a = list(range(100))
# 문자열 -> 리스트 변환
str = "python"
my_list = list(str) # ['p', 'y', 't', 'h', 'o', 'n']
# 리스트 -> 문자열 변환
str_list = ['There', 'is', 4, "items"]
result = ' '.join(map(str, str_list)) # There is 4 items
# 리스트를 깊은 복사 하는법
list1 = [1,2,3]
list2 = list(list1)
list1.append(1)
print(list1) # [1, 2, 3, 1]
print(list2) # [1, 2, 3]
a = [1,4,3]
# 리스트에 안에있는 원소 삽입
a.extend([2,5]) # [1, 4, 3, 2, 5]
a.append([2,5]) # [1, 4, 3, [2, 5]]
# 리스트 원소 뒤집기
a.reverse()
# 특정 인덱스에 데이터 추가
a.insert(2,3) # 인덱스2에 3추가
# 특정 값인 데이터 개수 세기
a.count(3)
# 특정 값 데이터 삭제 (인덱스가 낮은 것 하나)
a.remove(1)
# 리스트안에 있는 값 index 찾기
list1.index(1) # 없으면 오류남
a = ['a', 'b', 'c', 'd', 'e']
a[ 2 : 4 ] # ['c', 'd']
a[ -4 :-2] # ['b', 'c']
a[ 3 : 0 : -1] # 인덱스 1 ~ 3까지의 값을 거꾸로 가져오기 ['d', 'c', 'b']
10. itertools
from itertools import permutations, combinations, product, combinations_with_replacement
# (순열) 2개를 뽑아 나열하는 모든 순열을 출력
result = list(permutations(data,2))
# (조합) 2개를 뽑는 모든 조합 구하기
result = list(combinations(data,2))
# (중복 허용 순열) 2개를 뽑는 모든 순열 구하기
result = list(product(data,repeat = 2))
# (중복 허용 조합)2개를 뽑는 모든 조합 구하기
result = list(combinations_with_replacement(data,2))
11.bisect
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
print(bisect_left(a, 3)) # 2
print(bisect_right(a, 5)) # 4
12. Counter
- most_common() : Counter()에서 가장 빈도수가 높은 순으로 표시해 주는 하수 입니다.
- 원소 추가, 삭제, 여러 원소 한번에 추가 모두 가능하다.
from collections import Counter
list = ['Hello', 'HI', 'How', 'When', 'Where', 'Hello']
dic = Counter(list) # Counter({'Hello': 2, 'HI': 1, 'How': 1, 'When': 1, 'Where': 1})
# 한개 삭제
dic['Hello'] -= 1 # Counter({'Hello': 1, 'HI': 1, 'How': 1, 'When': 1, 'Where': 1})
# 한개 추가
dic['asd']+=1 # Counter({'Hello': 1, 'HI': 1, 'How': 1, 'When': 1, 'Where': 1, 'asd': 1})
# 여러개 추가
dic.update(['1','2','3']) # Counter({'Hello': 1, 'HI': 1, 'How': 1, 'When': 1, 'Where': 1, 'asd': 1, '1': 1, '2': 1, '3': 1})
value = "Hello Appia"
countValue = Counter(value)
print(countValue.most_common()) # [('l', 2), ('p', 2), ('H', 1), ('e', 1), ('o', 1), (' ', 1), ('A', 1), ('i', 1), ('a', 1)]
print(countValue.most_common(2) # [('l', 2), ('p', 2)]
13. math
import math
print(math.factorial(5)) # 5 팩토리얼 출력
print(math.sqrt(7)) # 7의 제곱근 출력
print(math.gcd(21,14)) # 21과 14의 최대 공약수 , 7
def lcm(a, b): return a * b // math.gcd(a, b) # 최소 공배수
math.ceil(5.123) # 소수점 올림
math.floor(5.123) # 소수점 내림
round(5.123) # 소수점 반올림
14. 에라토스테네스의 체
n=1000
primes=list(range(n+1))
primes[1] = 0
for i in range(2,int((n+1)**0.5)):
if primes[i] != 0:
for j in range(2*i, n+1, i):
primes[i] = 0
# 반목문에 의해 소수 판별하기
def sol1(n):
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
number = 100
print(sol1(number))
15. 중복O + 순서있게
N, M = 3,2
list =[]
def dfs(depth):
if depth == M:
print(' '.join(map(str, list)))
return
for i in range(1, N+1):
list.append(i)
dfs(depth+1)
list.pop()
dfs(0)
16. 중복x + 순서있게
N,M = 3, 2
visit = [False]*N
list =[]
def dfs(depth):
if depth == M:
print(' '.join(map(str, list)))
return
for i in range(N):
if not visit[i]:
visit[i] = True
list.append(i+1)
dfs(depth+1)
visit[i] = False
list.pop()
dfs(0)
17. 중복 O + 고르기
N,M = 3, 2
list =[]
def dfs(depth, start):
if depth == M:
print(' '.join(map(str, list)))
return
for i in range(start, N + 1):
list.append(i)
dfs(depth + 1, i)
list.pop()
dfs(0,1)
18. 중복 X + 고르기
N,M = 3, 2
list =[]
def dfs(depth, start):
if depth == M:
print(' '.join(map(str, list)))
return
for i in range(start, N + 1):
list.append(i)
dfs(depth + 1, i+1)
list.pop()
dfs(0,1)
18. 다익스트라
import heapq
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
graph = [[] for _ in range(N+1)]
visit = [1e9]*(N+1)
for i in range(M):
a,b,c = map(int,input().split())
graph[a].append((c,b))
start,end = map(int, input().split())
def sol(start):
global graph,visit
pq = []
heapq.heappush(pq, (0,start))
visit[start] = 0
while pq:
c_dist,cur = heapq.heappop(pq)
if visit[cur] < c_dist : continue
for n_dist,next in graph[cur]:
weight = n_dist + c_dist
if visit[next] > weight:
visit[next] = weight
heapq.heappush(pq, (weight,next))
sol(start)
print(visit[end])
20. 크루스칼
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent, a, b):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
edges = [[1,2,29], [1,5,75],[2,3,35],[2,6,34],[3,4,7],[4,6,23],[4,7,13],[5,6,53],[6,7,25]]
v,e = 7,9
parent = list(range(v+1))
result = 0
edges.sort(key =lambda x:x[2])
for e in edges:
a,b,cost = e
if find_parent(parent, a) != find_parent(parent, b):
union_parent(parent, a, b)
result += cost
print(result) # 159
21. 누적합 알고리즘
arr = [[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7]]
m = 4
n = 3
sum_arr = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, m+1):
sum_arr[i][j] = arr[i-1][j-1] + sum_arr[i-1][j] + sum_arr[i][j-1]- sum_arr[i-1][j-1]
22. 문자열
- +,- 부호나 소수점은 False로만 나온다 (구분 못함)
# 문자열에 숫자로만 이루어졌는지 확인
print('1234'.isdigit()) # True
print('abc1234'.isdigit()) # False
# 문자열 대소문자 변경
str1 = 'ponyozzang'
print(str1.upper()) #PONYOZZANG
print(str1.lower()) #PONYOZZANG
print(str1.isupper()) #False
# 문자열 변경
text = '123,456,789,999'
replaceAll= text.replace(",","") #123456789999
문제지
### 1 a를 프린트 하기
# a = 0.3 + 0.6
### 2. a의 b 거듭연산자
### 3. 자료형 변환 (문자 'a' 를 'b'로 만들기)
### 4. 입력
N =3
## N개의 정수를 한 줄로 입력 받아 List에 저장할 경우
## N개의 정수를 여러 줄에 걸쳐 입력 받아 List에 저장할 경우
## N개의 문자열을 여러 줄에 걸쳐 입력 받아 List에 저장할 경우
## N개의 정수를 여러 줄에 걸쳐 입력 받아 이차원 배열에 저장할 경우
### 5. 변수를 포함한 문자열 출력 (2020년 10월 1일)
# month = 10
# day = 1
### 6. 진수 변환
## 2진수 변환
## 8진수 변환
## 16진수 변환
## 2진수 -> 10진수
# a = '0b101010'
### 7. 사전 자료형
# data = dict()
# data['사과'] = 'Apple'
# data['바나나'] = 'Banana'
# data['코코넛'] = 'Coconut'
## 사과 를 삭제
## 바나나 삭제 및 반환
### 8. 집합 자료형
# a = set([1,2,3,4,5])
# b = {3,4,5,6,7}
## 합집합,교집합, 차집합
## 새로운 원소 추가
## 새로운 원소 여러 개 추가
## 특정한 값을 갖는 원소 삭제
### 리스트
## 1부터 100까지 리스트 만들기
# str = "python"
## 문자열 -> 리스트 변환
# str_list = ['There', 'is', 4, "items"]
## 리스트에 안에있는 원소 삽입
# a = [1,4,3]
## 리스트 원소 뒤집기
# a = [1,4,3]
## 3 데이터 개수 세기
# a = [1,4,3]
## 1 삭제 (인덱스가 낮은 것 하나)
# a = [1,4,3]
## 리스트안에 있는 1 index 찾기
### 순열, 조합, 중복순열,중복 조합
# N,M = 3,2
### 이분탐색 3 찾기 (왼쪽, 오른쪽)
# a = [1, 2, 4, 4, 8]
### 카운터
# list = ['Hello', 'HI', 'How', 'When', 'Where', 'Hello']
## 한개 삭제
## 한개 추가
## 여러개 추가
## 카운터 중 가장 빈도수가 높은 순서대로
### 수학
## 5 팩토리얼
## 7의 제곱근
## 21과 14의 최대 공약수
## 21과 14의 최소 공배수
## 소수점 올림
## 소수점 내림
## 소수점 반올림
### 에라토스테네스의 체 (반복문으로 확인하는 법까지)
# n=1000
### 중복O + 순서 O
# n,m = 3,2
### 중복X + 순서 X
# n,m = 3,2
### 중복O + 순서 O
# n,m = 3,2
### 중복X + 순서 X
# n,m = 3,2
### 다익스트라
# n,m,start,end = 7,5,1,5
### 크루스칼 알고리즘
### 누적합 알고리즘
# arr = [[1, 2, 3, 4],
# [2, 3, 4, 5],
# [3, 4, 5, 6],
# [4, 5, 6, 7]]
# m = 4
# n = 3
### 문자열
## 문자열에 숫자로만 이루어졌는지 확인
## 문자열 대소문자 변경
## 문자열 변경
'코딩 테스트 > 코딩테스트 - 학습' 카테고리의 다른 글
위상정렬 (1) | 2023.03.02 |
---|---|
이분 탐색 & 매개변수 탐색 & 투 포인터 탐색 (0) | 2023.02.02 |
Stack/Queue (0) | 2023.02.01 |
[DP] 누적합 알고리즘 (0) | 2023.01.31 |
DP (0) | 2023.01.30 |