문자열

  • 어떠한 단어에서 특정 문자가 있는지 위치를 찾을 때

    'word'.find('r')

    'word'.index('r')

    을 사용한다. 차이점은 find는 찾고싶은 문자가 없으면 -1을 출력하고, index는 오류가 출력된다.

  • input() 합수는 str을 받는 함수이다. 숫자를 넣어도 str
  • input() 대신 sys.stdin.readline() 사용하는 이유 반복문으로 여러 줄을 입력받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간초과가 발생하지 않는다.

    ※ readline()은 앞 뒤에 개행문자가 포함된다. 앞 뒤 공백을 제거하기 위해 뒤에 추가로 .strip()을 적어주자.

    띄어쓰기로 값을 구분해야 할때는 sys.stdin.readline().split()을 사용한다.

    주피터에서는 sys.stdin.readline() 작동하지않는다. input()으로 풀고 제출시에만 사용하자

  • 특정 단어의 개수를 셀 때

    word = 'ljes=njak'에서 'nj'의 개수를 찾으려면

    word.count('nj')를 치면된다.

  • 10의자리, 1의자리 문제 몫(//), 나머지(%)이용해서 풀기

    A // B 를 써야할 것 같은 문제 math.ceil(A/B) 고려할 것.

  • 40.0 같은 실수에서 소수점 아래까지 나타내고 싶으면 포맷팅을 사용하자. value = "%.3f" % 40.0
  • print()는 기본적으로 출력 이후에 줄 바꿈을 수행한다. 줄 바꿈을 원치 않는 경우 'end' 속성을 이용할 수 있다.

리스트

  • 리스트에서 list.count( * ) 하면 *값의 개수를 찾아준다.

  • 집합(set)는 중복된 원소를 가지지 않기에 list를 set로 바꿨다가 다시 list로 바꾸면 중복이 제거된다!

  • 정렬1 : sorted(list())

    정렬2 : list().sort()

    1번은 새로운 리스트가 만들어지고, 2번은 기존의 리스트를 정렬시켜서 대체시킨다.

  • 정렬에서 값이 리스트일 때, 정렬 중요도 설정

    A.sort(key = lambda x : x[1])

    2번째 원소로 정렬 후 1번째 원소로 정렬?

    A.sort(key = lambda x : (x[1], x[0]))

    2번째 원소로 내림차순 정렬 후 1번째 원소로 오름차순 정렬?

    A.sort(key = lambda x : (-x[1], x[0]))

  • list 맨 마지막 수를 없앨 때

    list.remove(list[-1])하면 탐색 후 제거.

    del list[-1]하면 맨 뒤를 바로 제거!

  • 리스트를 복사하고 싶을 때
    A = [1, 2, 3]
    temp = A
    
    라고 하면 참조가 된다. 복사만 하려면 슬라이싱을 이용하자.
    temp = A[:]
    
  • N x M 의 이중 배열을 만들고 싶을 때 리스트 컴프리헨션 이용.

    좋은 예시 : arr = [ [0]*m for _ in range(n)]

    잘못된 예시 : arr = [ [0]*m ] * n <-- 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식 된다.

  • 리스트에 홀수만 담고싶을 때, arr = [ i for i in range(20) if i%2 == 1] 이렇게 조건도 달아줄 수 있다.
  • 리스트 관련 메서드

람다 표현식

  • 람다 표현식을 이용하면 함수를 간단하게 작성할 수 있다.
    • 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징이다.
def add(a, b):
    return a+b

# 일반적인 add() 메서드 사용
print(add(3, 7))

# 람다 표현식으로 구현한 add() 메서드
print((lambda a, b : a + b)(3, 7))
10
10

딕셔너리

  • 파이썬의 딕셔너리는 해시테이블을 이용하므로 데이터 조회, 수정에 있어서 O(1)의 시간에 처리가 가능하다.

조건문

  • Python의 and

    A and B 에서, A가 거짓일 경우, B는 보지않고 거짓인 A를 출력. False를 리턴해주지 않는다.

    A and B 에서 A가 참이다? B는 확인하지 않고 그냥 B를 출력해준다. 참이면 참인대로, 거짓이면 거짓인대로

  • Python의 or 둘 중에 하나만 참이어도 참이기에 A or B 에서 A가 참일경우 B는 확인하지않고 그냥 A를 출력한다.

    마찬가지로 A가 거짓인경우 B를 확인안하고 바로 리턴해준다.

    결국 파이썬에선 거짓일 때 False가 아니라 거짓인 값 자체를 반환해준다.

  • 1 == 1 and 2 이렇게하면 2가 나오고

    (1==1) and (1==2) 이렇게 하면 False가 나온다.

    논리연산자는 각각의 요소마다 써주어야 한다!

  • 'C' == 'A' or 'C' == 'B' or 'C' == 'C'

    0 or 0 or 1 => 1 => True

  • 'C' == ('A' or 'B' or 'C')

    'C' == (1 or 1 or 1) => 'C' == 1 => False

  • 'C' == 'A' or 'B' or 'C'

    False or 'B' or 'C'에서 'B'는 바로 참으로 인식, 'B'를 출력

  • in 연산자와 not in 연산자

    리스트, 튜플, 문자열, 딕셔너리 모두 사용 가능

    x in 리스트 : 리스트 안에 x가 들어가 있을 때 참(True)

    x not in 문자열 : 문자열 안에 x가 들어가 있지 않을 때 참(True)

전역변수, 지역변수

count = 0
def A(~):
    count += 1
A(~)

이렇게 해도 count 는 증가하지않는다. 함수안의 count는 지역변수기 때문이다.

클래스

Class stack():
    ~~~~~
    ~~~~~

이런 클래스가 있다면 st = stack 이 아니라 st = stack() 이렇게 해줘야 인스턴스가 생성됨.

st = stack 을 하면 st가 stack 클래스의 기능을 한다.(별명)

실전에서 유용한 표준 라이브러리

  • 내장 함수 :

    기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공한다.

    파이썬 프로그램을 작성할 때 없어서는 안되는 필수적인 기능을 포함하고 있다.

  • itertools :

    파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공한다.

    특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용된다.

  • heapq :

    힙(Heap) 자료구조를 제공한다.

    일반적으로 우선순위 큐 기능을 구현하기 위해 사용된다.

  • bisect :

    이진 탐색(Binary Search) 기능을 제공한다.

  • collections :

    덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함한다.

  • math :

    필수적인 수학적 기능을 제공한다.

    팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함한다.

ETC

  • 시간복잡도 생각하며 알고리즘 짤 것
  • 주피터 ctrl + / 누르면 그 줄 주석처리!
  • 소수 / 에라토스테네스의 채 공부해볼 것. 구현
  • for i in range(n) 에서 맨 끝 1개를 덜 포함해서 종종 런타임에러가 일어났다. 주의
  • while stack and i<N: 이거 하니까 인덱스 오류가 안났다. (백준 # 17298 오큰수)

    내가 했던건 while i<N:

    차이점 ??