다시 보기 위한 파이썬 문법

mangyun·2021년 11월 2일
0

알고리즘

목록 보기
1/9

<다시 보기 위한 파이썬 문법 공부>

1. 자료형

수 자료형은 코딩 테스트에서 가장 기본적인 자료형임
실제로 코딩테스트에서도 대부분의 경우 정수형을 다루는 문제가 많이 출제

  • 정수형 Integer
    정수형은 정수를 다루는 자료형이며 정수형에는 양의 정수, 음의 정수 , 0이 있다.

  • 실수형 Real Number

    • 아래의 데이터를 포함하는 수 자료형으로 파이썬에는 변수에 소수점을 붙인 수를 대입하면 실수형 변수로 처리한다. 소수부가 0이거나, 정수부가 0인 소수는 0을 생략하고 작성할 수 있다.
    • 실수형 데이터를 표현하는 방식으로 파이썬에는 e나E를 이용한 지수표현방식을 이용하기도 함
      EX) 유효숫자e지수 =유효숫자 x 10지수
      최단 경로 문제에서 도달할 수 없는 노드에 대하여 최단 거리를 '무한'으로 설정하고는 한다. 이 무한을 10억을 이용하여 표현함.
      일일이 10억을 대입하기 번거로우니, 지수표현방식을 사용해서 손쉽게 표현
    • 컴퓨터는 실수를 정확히 표현하지 못함. => 따라서 round()함수를 이용해서 풀이
    • 수 자료형의 연산 => +, -, x, /, ** (거듭제곱)
      이중에서 "/"의 사용에 주의

/ => 나누기
% => 나머지
// => 몫332

#정수형

a = 1000 # 양의 정수
print(a)

a = -7 #d 음의 정수
print(a)

a = 0
print(a)

#실수형

a = 157.93

a= -1837.2

#소수부가 0일때 0을 생략
a = 5.
print(a)

#정수부가 0일때는 0을 생략
a = -.7
print(a)

a = 1e9
print(a)

a = 75.25e1
print(a)

a = 3954e-3
print(a)

  • 리스트 자료형
    c나 자바와 같은 프로그래밍 언어의 배열 기능을 포함하고 있으면, 내부적으로 연결 리스트 자료구조를 채택하고 있어서 append(), remove() 등의 메서드를 지원한다.
  • 리스트 만들기
    대괄호 안에 원소를 넣어 초기화하며, 쉼표로 원소를 구분함.
    인덱스로 접근가능
    a = [1, 2, 3, 4, 5, 6, 7]
    print(a[4])
    a = list()
    a = []

tip) 코딩 테스트에서 주로 크기가 N인 1차원 리스트를 초기화해야 하는데 다음 방식으로 초기화하면 편리하다.

크기가 N 이고, 모든 값이 0인 1차원 리스트를 초기화

  • 리스트의 인덱싱과 슬라이싱
    인덱스 값을 이용하여 리스트의 특정한 원소에 접근하는 것을 인덱싱.
    또한 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용할 수 있음.

  • 리스트 컴프리핸션(특정크기의 2차원 리스트 초기화시 반드시!)
    리스트를 초기화 하는 여러방법 중 하나이다.
    => 대괄호 안에 조건문과 반복문을 넣는 방식으로 초기화할 수 있다.

tip) 이러한 리스트 컴프리 핸션은 코테에서 2차원 리스트를 초기화할때 매우 효과적으로 사용됨
example코드 잘확인 몰랐던 것!

  • 언더바()는 어떤 역활인가?
    파이썬 자료구조/알고리즘에서 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할때 언더바(
    )를 사용함.

ex)

summary = 0 for _ in range(5) :
for i in range(1, 10): print("hello world")
summary += i

print(summary)
  • 리스트 관련 기타 메소드 example 코드 확인

  • 파이썬에는 없는 remove_all()같은 함수 구현 exampel 코드 확인
    => 집합과 not in 사용

문자열 자료형

  • 문자열 초기화
    문자열 안에 "" or ''를 이용.

백슬래쉬를 사용하면, 큰따옴표나 작은따옴표를 문자열에 원하는 만큼 포함시킬 수 있다.

  • 문자열 연산 =>
    1)" + "를 사용.. 단순히 문자열이 더해져서 연결됨.
    2) 문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해진다.
    3) 파이썬 문자열은 내부적으로 리스트와 같이 처리(인덱싱과 슬라이싱 가능)

튜플 자료형(그래프 알고리즘을 구현할때 자주 사용)
리스트와 거의 비슷하지만, 다음과 같은 차이가 있음
1)튜플은 한 번 선언된 값을 변경할 수 없다.
2)리스트는 []를 이용하지만, 튜플은 소괄호()를 이용함.

ex) 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘의 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않는다. 그래서 그 우선순위 큐에 들어가는 데이터를 튜플로 구성하여 소스코드를 작성한다.

  • 사전 자료형

    • 1) 키(key)와 값(value)의 쌍을 데이터로 가지는 자료형이다. 앞서 다루었던 리스트나 튜플은 값을 순차적으로 저장한다는 특징이 있다.하지만 사전 자료형은 키-값 쌍을 데이터로 가진다는 점에서, 우리가 원하는 변경 불가능한 데이터를 키로 사용할 수 있다.

    • 2) 파이썬의 사전자료형은 내부적으로 해시 테이블(HashTable)을 이용하므로 기본적으로 데이터의 검색 및 수정에서 있어서 O(1)의 시간에 처리할 수 있다.

    • 3) 사전 자료형을 이용하는 경우 -> 사전 자료형에 특정한 원소가 있는지 검사하는,,! "원소 in 사전"의 형태를 사용할 수 있다.

  • 사전 자료형 관련 함수
    • 1) 키 데이터만 담은 리스트 => data.keys()
    • 2) 값 데이터만 담은 리스트 => data.values()
  • 집합 자료형 {}, sets
    • 1) 중복을 허용하지 않음
    • 2) 순서가 없다

ex)학생 번호가 주어졌을때 해당 학생이 선택되었는지 여부를 출력하는 문제 => 특정 데이터가 이미 등장한 적이 있는지를 체크할때 매우 효과적

  • 집합 자료형의 연산
    합집합, 차집합, 교집합

  • 집합 자료형 관련 함수

2. 조건문

조건문을 작성할 때는 코드의 블록을 들여쓰기로 설정한다는 점을 기억

  • 비교 연산자, 논리연산자, in & not in 연산자

  • pass문 : 조건문의 값이 참이라고 해도, 아무것도 처리하고 싶지 않을 때 pass문을 이용

  • 조건문에서 실행될 코드가 한 줄인 경우, 굳이 줄 바꿈을 하지 않고도 간략하게 표현 수 있다.

  • 조건부 표현식을 이용하면 if - else문을 한 줄에 작성해 사용할 수 있다.

score = 85
result = "Success" if score >= 80 else "Fail"
  • 특히, 리스트에 있는 원소의 값을 변경해서, 또 다른 리스트를 만들고자 할 때 매우 간결하게 사용 가능
    ex)리스트에서 특정한 원소의 값만을 없앤다고 해보자.
a = [1,2,3,4,5,5,5]
remove_set = {3, 5}

result = [i for i in a if i not in remove_set]

tip) 다른 언어와 달리 파이썬은 조건문 안에서 수학의 부등식을 그대로 사용 가능

x = 15 x = 15
if x > 0 and x < 20 : if 0< x < 20 :

위의 2개의 식이 같음.

3. 반복문

보통 for문을 더 자주 사용함. 코드의 수가 줄어들음.

  • for문 사용시 수를 차례대로 나열할 때는 range()를 주로 사용함.
    range(시작 값, 끝 값 + 1) 형태로 쓰인다.
    range(값) : 자동으로 0부터 시작, 끝 값 +1
  • continue 문 사용

함수
def 함수명(매개변수):
실행할 코드
return 반환 값

  • 함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우
    => global 함수를 사용

해당 함수에서는 지역변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.

a = 0

def func():
global a
a += 1

for i in ragne(10):
func()

* 람다 표현식도 가능

print((lamda a, b:a+b)(3,7)
  • 입출력(암기)
    문자열을 띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저정하는 코드
    <입력>
    =>list(map(int, input().split))
    : 가장 먼저 input으로 입력받은 문자열을 split를 사용해서 공백으로 나눈 리스트로 바꾼 뒤에, map을 이용하여 해당 리스트의 모든 원소애 int() 함수를 적용핞다. 최종적으로 그 결과를 list()로 다시 바꿈으로써 입력받은 문자열을 띄어쓰기로 구분하여 각각 숫자 자료형으로 저장하게 되는 것이다.

if) 입력을 받아야하는 데이터의 개수가 많지 않다면

n, m, k = map(int, input().split())

if) 입력을 최대한 빠르게 받아야 하는 경우
import sys
sys.stdin.readline().rstrip()

<출력>

answer = 7

print("정답은" + answer + "입니다.")

오류!

so)

print("정답은" + str(answer) + "입니다.")
print("정답은" , str(answer) , "입니다.")
print(f"정답은 {answer}입니다.")

주요 라이브러리의 문법과 유의점 6가지!

1) 내장함수
2) itertools
3) heapq
4) bisect
5) collections
6) math

  • 내장함수
    파이썬에서 별도의 import 명령어 없이 바로 사용할 수 있는 내장 함수

example코드 확인

  • itertools
    -> 코테에서 가장 잘 쓰이는 건
    permutaions, combinations 순열과 조합

permutaions : 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다.

  • heapq
    힙 기능을 위해 heapq라이브러리를 제공. => 우선순위 큐 기능을 구현하고자 할 때 사용됨.

파이썬의 힙은 최소 힙으로 구성되어 있으므로 단순히 원소를 힙에 넣었다가 빼는 것만으로도 시간 복잡도O(NlogN)에 오름차순이 정렬이 완료.
보통 최소 힙 자료구조 최상단 원소는 항상 "가장 작은 원소"이기 때문이다.

파이썬에서는 최대힙을 제공하지 않음 => 따라서 최대힙을 구현해야 할 때는 원소의 부호를 임시로 변경하는 방식을 사용한다. 힙에 원소를 삽입하기 전에 잠시 부호를 바꾸었다가 , 힙에서 원소를 꺼낸 뒤에 다시 원소의 부호를 바꾸면 된다. code확인

  • biset

    • 이진 탐색을 쉽게 구현할 수 는 라이브러리

    • 정렬된 배열에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용된다.

biset_left(a, x) = 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드

biset_right(a, x) = 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드

위에 두 함수는 정렬된 리스트에서 값이 특정 범위애 속하는 원소의 개수를 구하고자 할 때, 효과적으로 사용될 수 있다.

profile
기억보다는 기록을 하자.

0개의 댓글

관련 채용 정보