[코테] 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기 (3) - 문법

김재연·2022년 7월 6일
0
post-thumbnail

1. 기본입출력

1) 입력

  • input() : 한줄의 문자열을 입력받는 함수
  • map() : 리스트의 모든 원소에 각각 특정한 함수를 적용
  • 🎇 list(map(int, input().split())) 🎇 : 공백을 기준으로 구분된 데이터를 입력받을 때 / 구분된 데이터를 모두 정수형으로 바꾸고 리스트로 만듦
  • a,b,c = map(int, input().split()) : 공백을 기준으로 구분된 데이터의 개수가 많지 않을때
  • sys.stdin.readline() : 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우 (입력 후 엔터가 줄바꿈 기호로 입력되므로 rstrip()을 함께 사용)

2) 출력

  • print() : 기본 출력. 줄바꿈을 원치 않는 경우 end 속성 이용
    ex) print("Hello World", end=" ")
  • f-string : 문자열 앞에 f를 붙이고 중괄호 안에 변수명 기입
    ex) print(f"정답은 {answer}입니다.")

2. 조건문

if 조건문1:
	조건문1True일 때 실행되는 코드
elif 조건문2:
	조건문1에 해당하지 않고, 조건문2True일때 실행되는 코드
else:
	위의 모든 조건문이 모두 True가 아닐때 실행되는 코드
  • elif나 else는 경우에 따라 생략해도 됨
  • 비교연산자 : ==, !=
  • 논리연산자 : and, or, not
  • in, not in : 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
  • pass : 아무것도 처리하고 싶지 않을 때
  • 조건부 표현식 : "Success" if score >= 80 else "Fail"
  • 파이썬에서는 수학의 부등식을 그대로 사용할 수 있다.
    ex) x>0 and x<20 == 0<x<20

3. 반복문

  • while보다 for이 간결한 경우가 많다.
  • 코딩테스트에서 무한루프를 구현할 일은 거의 없으니 유의
  • for문에서 연속적인 값을 차례대로 순회할 때는 range()를 주로 사용
    ex) range(시작값, 끝값+1) / 인자를 하나만 넣으면 0부터 시작
  • continue: 반복문에서 남은 코드의 실행을 건너뛰고 다음 반복을 진행할때 사용

4. 함수와 람다표현식

1) 함수

  • 파라미터의 변수를 직접 지정할 수 있음 (순서 상관X)
    ex) add(b=3, a=7)
  • 🌏 global 🌏 : global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조한다.
a = 10

def func():
  global a
  a += 1
  print(a)

func()

"""
실행결과
11
"""
  • 값의 변화 없이 단순 참조는 global 쓰지 않아도 오류 없음
  • 전역변수(ex. list)의 내부메소드(ex. append) 호출도 오류 없이 수행 가능
  • 똑같은 이름의 지역변수와 전역변수가 있으면 지역변수 우선 참조
  • 파이썬에서는 여러개의 반환값을 가질 수 있음

2) 람다표현식

  • 람다표현식을 사용하면 함수를 간단하게 작성할 수 있다.
def add(a,b):
  return a+b

print(add(3,7)) # 일반적인 add() 메소드 사용
print((lambda a, b: a+b)(3, 7)) # 람다표현식으로 구현한 add() 메소드

"""
실행결과
10
10
"""
array = [('홍길동', 50),('이순신', 32),('아무개', 74)]

def my_key(x):
  return x[1]

print(sorted(array, key=my_key)) # 정렬하는 key 값 = 점수
print(sorted(array, key=lambda x: x[1]))

"""
실행결과
[('이순신', 32),('홍길동', 50),('아무개', 74)]
[('이순신', 32),('홍길동', 50),('아무개', 74)]
"""
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]

result = map(lambda a, b: a+b, list1, list2)

print(list(result))

"""
실행결과
[7,9,11,13,15]
"""

5. 자주 사용되는 표준 라이브러리

1) 내장함수

  • 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
  • 파이썬 프로그램을 작성할 때 없어서는 안되는 필수적인 기능 포함
  • ex) sum(), min(), max(), eval(), sorted()

2) itertools

  • 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
  • 특히 순열과 조합 라이브러리가 자주 사용됨
  • 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
    • ex) {'A', 'B', 'C'}에서 3개를 선택하여 나열하는 경우 : ABC, ACB, BAC, BCA, CAB, CBA
    • 순열의 수 = nPr = n(n-1)(n-2)...(n-r+1)
  • 조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것
    • ex) {'A', 'B', 'C'}에서 순서를 고려하지 않고 2개를 뽑는 경우 : AB, AC, BC
    • 조합의 수 = nCr = n(n-1)(n-2)...(n-r+1) / r!
from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 3)) # 모든 순열 구하기
print(result)

"""
실행결과
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'),
('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
"""
from itertools import combinations

data = ['A', 'B', 'C']

result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result)

"""
실행결과
[('A', 'B'), ('A', 'C'), ('B', 'C')]
"""
from itertools import product

data = ['A', 'B', 'C']

result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기 (중복 허용)
print(result)

"""
실행결과
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'),
('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
"""
from itertools import combinations_with_replacement

data = ['A', 'B', 'C']

result = list(combinations_with_replacement(data, 2))
# 2개를 뽑는 모든 조합 구하기 (중복 허용)
print(result)

"""
실행결과
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
"""

3) heapq

  • 힙(Heap) 자료구조 제공
  • 일반적으로 우선순위 큐 기능을 구현하기 위해 사용됨

4) bisect

  • 이진 탐색(Binary Search) 기능을 제공

5) collections

  • 덱(deque), 카운터(Counter) 등의 자료구조 포함
  • 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}
"""

6) math

  • 필수적인 수학적 기능 제공
  • 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이(pi)와 같은 상수 포함
import math

def lcm(a,b):
  return a*b // math.gcd(a, b)

a = 21
b = 14

print(math.gcd(21, 14)) # 최대공약수
print(lcm(21, 14)) # 최소공배수

"""
실행결과
7
42
"""
profile
일기장같은 공부기록📝

0개의 댓글