본문 바로가기
Programming/Python

#1 Python 코딩테스트 대비 여러 Tip 정리

by 데이터현 2021. 10. 7.

https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2 

이 포스트는 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅 입니다.

 

- 실수형 데이터의 경우, 컴퓨터 특성상 4바이트나 8바이트로 실수를 표현하기 때문에 근사치를 표현하여 정확하게 떨어지지 않는 경우가 많다.

- 따라서 round() 함수를 사용해서 소수점 반올림을 하는 방법이 권장된다.

a = 123.456
print(round(a, 2))
# 123.46

 

리스트를 초기화 할 때 리스트 컴프리헨션을 활용해서 초기화 하면 편함

# 1차원 리스트
array = [0]*3
# [0,0,0]

# 2차원 리스트 N * M
N, M = 3,5
array = [[0]*M for _ in range(N)]
# [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

# 잘못된 예시
array= [[0]*M]*N
# 위의 경우와 값은 동일하나 내부적으로 M*[0]의 리스트(임의의 주소값을 갖는 객체로 인식함)
# 를 N의 길이만큼 참조하여 복사된 주소값을 가지게 됨

- 자주 사용하는 리스트 관련 함수 시간복잡도.

 

remove 함수는 특정한 값을 갖는 원소를 하나만 제거 한다. 모든 원소를 제거 하고 싶다면 아래와 같은 방법을 사용하자.

a =[1,2,3,4,5,5,5]
remove_set = {3,5}

result = [i for i in a if i not in remove_set]
print(result)
# [1,2,4]

- 문자열은 특정한 인덱스의 값을 변경할 수 없다.(immutable)

- 튜플은 ( ) 를 사용하고 값을 변경할 수 없다.(immutable)

- 튜플은 리스트에 비해 공간 효율적임.

 

튜플을 사용하면 좋은 예

1. 서로 다른 성질의 데이터를 묶을 때

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

3. 리스트보다 메모리를 효율적으로 사용해야 할 때

 

- dict는 O(1) 시간 복잡도를 가짐.

key 만 원할 때 keys

value만 원할 때 values

 

- 집합 자료형

- 모든 작업에서 O(1)

- set( ) 함수 이용하거나 { } 이용

- 중복 X 순서 X

 

집합 자료형 연산

a = set([1,2,3,4,5])
b = set([3,4,5,6,7])

# 합집합
print(a | b)
# {1,2,3,4,5,6,7}

# 교집합
print(a & b)
# {3,4,5}

# 차집합
print(a - b)
# {1,2}

 

집합 자료형 함수

data = set([1,2,3])
print(data)
# {1,2,3}

# 원소 추가
data.add(4)
print(data)
{1,2,3,4}

# 원소 여러 개 추가
data.update([5,6])
print(data)
{1,2,3,4,5,6}

# 특정 값 갖는 원소 삭제
data.remove(6)
print(data)
{1,2,3,4,5}

# 없는 값 remove 할 시 에러 발생
data.remove(7)

- 입력 받기

a = input() # 문자열 형태로 입력 됨

b = int(input()) # int 형태로 변환

c = list(map(int, input().split())) # 공백을 기준으로

a, b ,c = map(int, input().split()) # 입력이 3개로 주어진 경우

# 빠른 입력 받기
import sys
data = sys.stdin.readline().rstrip()
print(data)

유용한 표준 라이브러리

-

- 자주 사용 되는 내장함수

result = sum([1,2,3,4,5])
print(result)
# 15

min_result = min(7,3,5,2)
min_result = max(7,3,5,2)
print(min_result , max_result)
# 2 7

result = eval("(3+5)*7")
print(reuslt)
# 56

 

# sorted()
result = sorted([9,1,8,5,4])
reverse_result = sorted([9,1,8,5,4],reverse=True)
print(result)
# [1,4,5,8,9]
print(reverse_result)
# [9,8,5,4,1]

# sorted() with key
array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)
# [('이순신', 75), ('아무개', 50), ('홍길동', 35)]

 

천만 , 1억 단위를 넘어갔을 경우 시간 초과 판정 날 경우가 많다.

#[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
#[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

 

Counter 객체를 활용하여 내부 원소 등장 횟수 구하기

from collections import Counter

counter = Counter(['red','blue','red','green','blue','blue'])

print(counter['blue'])
print(counter['green'])
print(dict(counter))

'''
3
1
{'red': 2, 'blue': 3, 'green': 1}
'''

 

import math


# 최소 공배수(LCM)를 구하는 함수
def lcm(a,b):
    return a * b // math.gcd(a, b)

a = 21
b = 14

print(math.gcd(a,b))
print(lcm(a,b))

'''
7
42
'''

재귀 사용시

import sys
sys.setrecursionlimit(10 ** 6)

댓글