본문 바로가기
코딩 테스트/코딩테스트 - 학습

까먹는 코테 문법2

by 안스 인민군 2023. 2. 16.

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