코딩테스트를 위한 파이썬 사용법, 팁 정리

Variety_·2021년 10월 5일
1

Python

목록 보기
7/12

코딩테스트 준비를 위해 이곳저곳 어디저기 요기저기 궁시렁궁시렁 합쳐놓은 노트..

자료형(h2)

수 자료형(h3)

e다음에 오는 수는 10의 지수부( 유효숫자e지수 ex- 1e9 = 1,000,000,000), 주로 INF로 사용
소수점 반올림 컴퓨터 내부에서는 2진수로 작업해 실수 정보를 표현하는데 정확도 떨어짐
따라서 round(Argument,반올림하고자 하는 위치-1) 사용, 보통 5자리에서 반올림하여 같으면 인정

리스트 자료형(h3)

비어 있는 리스트 선언
a=list() 또는 a = []
1차원 리스트 초기화 a = [0] * size

리스트 컴프리헨션(h4)

리스트 초기화 방법 중 한가지.
array = [ i for i in range(20) if i % ==2 ] , =[ i*i for i in a if i in b ]

2차원 리스트 초기화
N by M 크기의 2차원 리스트 초기화
array=[ [0] m for _ in range(n) ] 2차원 리스트 초기화는 반드시 리스트 컴프리헨션을 사용해야함.
array=[ [0]
m ] * n 이렇게 할 시 내무에 포함된 n개의 리스트가 동일한 객체의 레퍼런스로 인식함.

리스트 관련 기타 메서드(h4)

메서드명사용법설명시간 복잡도
append()변수명.append()O(1)
sort()변수명.sort(reverse=True 면 내림차)O(NlogN)
reverse()리스트의 원소의 순서를 뒤집음O(N)
insert()변수명.insert(인덱스,삽입할 값)O(N)
count()O(N)
remove()변수명.remove(특정 값)특정값이 여러개면 한 개만 삭제한다.O(N)
pop()변수명.pop(인덱스)기본은 맨오른쪽이고 값을 리턴함.

문자열 자료형(h3)

튜플 자료형(h3)

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

    -> 그래프 알고리즘을 구현할 때 자주 사용된다.

    -> 알고리즘을 잘못 작성하여 변경하면 안되는 값을 변경했는지 체크가 가능하다.

    -> 일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다. ( 주로 다익스트라 최단 경로 (비용,노드번호) )

사전 자료형(h3)

Key와 Value의 쌍을 데이터로 가지는 자료형. 인덱싱 불가

사전 자료형 관련 함수(h4)

keys(), values(), items()

집합 자료형(h3)

  • 중복을 허용하지 않음
  • 순서가 없다.

집합 자료형의 연산, 함수

| : 합집합 &: 교집합 - : 차집합
add(), update(), remove() 등 사용 가능.

조건문(h2)

기타 연산자(h3)

pass문

조건부 표현식(Conditional Expression)

#아래와 같은 식으로 사용 가능
score = 85
result = "Success" if score >=80 else "Fail"
print(result)

반복문(h2)

While문(h3)

  • 조건이 참일 때에 한해서, 반복적으로 코드가 수행된다.

for문(h3)

in 뒤에 오는 데이터에 포함되어 있는 모든 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문한다.
in 뒤에 오는 데이터로는 리스트, 튜플, 문자열 등이 사용될 수 있다.

ex) for 변수 in 리스트:

continue문 : 반복문의 처음으로 돌아간다.

함수(h2)

global 변수
- 함수 안에서 함수 밖의 변수 데이터를 변경하는 경우에 사용한다.

a = 0
def func():
    global a
     a += 1
for i in range(10):
    func()
print(a)

10

람다표현식(lambda Express) (h3)

filter,map,reduce에서 제일 많이 쓰임

nums = [1, 2, 3, 6, 8, 9, 10, 11]

list(filter(lambda x : x%2==0, nums))  #filter(함수,리스트)
map(lambda x : x**2, nums)

입출력 (h2)

  • 입력을 빠르게 받아야 하는 경우
import sys
sys.stdin.readline().rstrip()
  • 문자열과 수를 함께 출력하려면 더하기 연산자(+)만을 이용하면 오류가 발생한다.

    -str(수) 처리 후 + 또는 ,를 이용한다.

  • f-string 문법
    - 문자열 앞에 f를 붙임으로써 중괄호({ } ) 넣고 자료형의 변환 없이도 처리가능.

answer=7
print(f"정답은{answer}입니다.")

주요 라이브러리의 문법과 유의점(h2)

  • itertools (순열, 조합)
  • heqpq(우선순위 큐)
  • bisect(이진탐색)
  • collections(deque,counter etc..)
  • maht(factorial,gcd,sqrt etc...)

sorted 튜플 키값을 기준으로 정렬할 때 , sorted(객체, key=lambda x:x[1])

itertools

from itertools import permutations  #또는 combinations
data = ['a', 'b', 'c']
result = list(permutations(data, 3))

#permutations,combinations는 클래스이므로 객체 초기화 이후에는 리스트 자료형을 변경해야 함

#중복순열
from itertools import product

result = list(product(data, repeat=2))
#결과 9개 3*3이니까 

#중복조합
from itertools import combinations_with_replacement

result = list(combinations_with_replacement(data, 2))
#6개 , 3H2 인듯 !

#빈도계산
from collections import Counter

arr = [int(input()) for _ in range(10)]
val = Counter(arr).most_common()
[(30,3), (40,2), (10,1)] 처럼 0번쨰 인덱스는 arr의 숫자 1번째 인덱스는 arr에 등장 빈도

heapq

우선순위 큐를 구현하기 위해 사용, PriorityQueue 라이브러리보다 빠름.

파이썬에서 힙은 Min Heap이므로 O(NlogN)에 오름차순 정렬 가능.

import heapq

def heapsort(iterable):
    h = []
    resut = []
    #모든 원소를 차례때로 힙에 삽입
    for value in iterable:
        heapq.heappush(h, value)
    #힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
    for i in range(len(h)):
        result.append(heapq.heappop(h))
       return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])

#결과는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Maxheap은 제공하지 않아서 위의 방법에서 부호를 변경하는 방식을 사용.

힙의 원소를 삽입하기전 부호를 변경하고 힙에서 원소를 꺼낸 뒤에 다시 원소의 부호변경.

bisect

"""
정렬된 배열에서 특정 원소를 찾을 떄 효과적
bisect_left(a,x) : 정렬된 순서를 유지하면서서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾음
bisect_right(a,x) : 오른쪽
ex) [1,2,4,4,8] 에서 bisect_left(a,4) 실행시 2 반환, right는 4반환

이를 이용해 정렬된 리스트에서 특정 범위에 속하는 원소 개수를 찾을 때 효과적

""" 
def count_by_value(a, left_value, right_value):
    right_index = bisect_rigt(a, right_value)
    left_index = bisect_left(a, left_value)
    return right_index - left_index

collections

"""
리스트 자료형은 삽입,삭제에 O(N)이 걸리나 deque는 O(1)만에 해결
pop, popleft, append, appendleft 제공
Counter는 등장 횟수를 세준다.
"""
from collections import Counter
Counter(list).most_common() 하면 딕셔너리형태로 ('이름','빈도') 순으로 내림차순 정렬됨

각종 함수 사용법


.isalpha() : 해당문자가 영문자인지 아닌지 판별해줌

join 함수

기본 형태 '구분자'.join(리스트)

'\n'.join(list) 하면 한줄씩 띄어쓰기한걸로 출력됨!

enumerate()

list = [1,2,3,1,2]

pos = [ i for i , x in enumerate(list) if x==찾는값 ]

기타


  1. 정수와 배열이 같은 줄에 들어오는 경우
4 10 20 30 40
3 7 5 12
3 125 15 25 와 같이 한 줄에 첫번째는 어레이에 들어갈 수의 개수 n이 주어지고 다음에는 n이 주어질 떄
N,*arr=map(int,input().split()) 처럼 arr 앞에 *을 붙이면 뒤이어 나오는 값이 arr에 배열로 저장됨
즉 N에는 4가 저장되고 arr에는 [10,20,30,40] 이 저장됨
  1. 배열을 연결해서 출력

    1. ".join() 함수사용 ex) ".join(map(str,arr))

    2. arr=[1,2,3,4]에서 [과 ,를 빼고 출력하는 법

      print(*arr) 하면 출력됨 ...

Utility 함수 구현

def v(*args):
    return np.array(args)

위처럼 하면 *args에 몇 개 넣든 알아서 전송되어 매번 일일이 np.array같은 작업 안해도 됨

💡Tip : 한줄에 여러실행을 하고 싶을 때!

num1=10; num2=5 처럼 세미콜론 찍으면 됨

💡Tip : 코드가 너무 길어질 때 \를 치고 엔터를 누르면 한 줄로 인식!

0개의 댓글