파이썬 문법
[2021 이코테] 1. 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기
기본 입출력
- input() 함수는 한 줄의 문자열을 입력 받는 함수
- map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
- 예시 ) 공백을 기준으로 구분된 데이터를 입력 받을 때 다음과 같이 사용
list(map(int, input().split()))
- 예시 ) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 단순히 다음과 같이 사용
a, b, c = map(int, input().split())
n = int(input())
data = list(map(int, input().split())
data.sort(reverse=True)
print(data)
>>> 5
>>> 65 90 75 34 99
>>> [99, 90, 75, 65, 34]
빠르게 입력 받기 🔥
- 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우
- 파이썬의 경우 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 메서드를 이용
- 단, 입력 후 엔터(Enter)가 줄바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용
import sys
data = sys.stdin.readline().rstrip()
print(data)
자주 사용되는 표준 출력 방법
- 파이썬에서 기본 출력은 print() 함수를 이용
- 각 변수를 콤마(,)를 이용하여 띄어쓰기로 구분하여 출력 가능
- print()는 기본적으로 출력 이후에 줄바꿈을 수행
- 줄바꿈을 원치 않는 경우 'end' 속성 이용 가능
a = 1
b = 2
print(a, b)
print(7, end=" ")
print(8, end=" ")
answer = 7
print(" 정답은 " + str(answer) + "입니다.")
>>> 1 2
>>> 7 8 정답은 7입니다.
f-string 예제
- 파이썬 3.6부터 사용 가능하며, 문자열 앞에 접두사 'f'를 붙여 사용
- 중괄호 안에 변수명을 기입하여 간단히 문자열과 정수를 함께 넣을 수 있음
answer = 7
print(f"정답은 {answer}입니다.")
>>> 정답은 7입니다.
파이썬의 pass 키워드
- 아무것도 처리하고 싶지 않을 때 pass 키워드를 사용
- 예시 ) 디버깅 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우
score = 85
if score >= 80:
pass
else:
print("성적이 80점 미만입니다.")
print("프로그램을 종료합니다.")
>>> 프로그램을 종료합니다.
파이썬의 continue 키워드
- 반복문에서 남은 코드의 실행을 건너뛰고, 다음 반복을 진행하고자 할 때 continue를 사용
- 1부터 9까지의 홀수의 합을 구할 떄 다음과 같이 작성 가능
result = 0
for i in range(1, 10):
if i % 2 == 0:
continue
result += i
print(result)
>>> 25
scores = [90, 85, 77, 65, 97]
cheating_student_list = {2, 4}
for i in range(5):
if i + 1 in cheating_student_list:
continue
if scores[i] >= 80:
print(i + 1, "번 학생은 합격입니다.")
>>> 1 번 학생은 합격입니다.
>>> 5 번 학생은 합격입니다.
파이썬의 break 키워드
- 반복문을 즉시 탈출하고자 할 때 break를 사용
- 1부터 5까지의 정수를 차례대로 출력하고자 할 때 다음과 같이 작성 가능
i = 1
while True:
print("현재 i의 값:", i)
if i == 5:
break
i += 1
>>> 현재 i의 값: 1
>>> 현재 i의 값: 2
>>> 현재 i의 값: 3
>>> 현재 i의 값: 4
>>> 현재 i의 값: 5
함수 정의하기
- 프로그램에는 똑같은 코드가 반복적으로 사용되어야 할 때가 많음
- 함수를 사용하면 소스코드의 길이를 줄일 수 있음
- 매개 변수 : 함수 내부에서 사용할 변수
- 변환 값 : 함수에서 처리 된 결과를 반환
파라미터 지정하기
def add(a, b):
print('함수의 결과:', a + b)
add(b = 3, a = 7)
>>> 함수의 결과: 10
global 키워드 🔥
- global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 됨
a = 0
def func():
global a
a += 1
for i in range(10):
func()
print(a)
>>> 10
여러 개의 반환 값
- 파이썬에서 함수는 여러 개의 반환 값을 가질 수 있음
def operator(a, b):
add_var = a + b
subtract_var = a - b
multiply_var = a * b
divide_var = a / b
return add_var, subtract_var, multiply_var, divide_var
a, b, c, d = operator(7, 3)
print(a, b, c, d)
람다 표현식 🔥
- 람다 표현식을 이용하면 함수를 간단하게 작성 가능
- 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징
def add(a, b):
return a + b
print(add(3, 7))
print((lambda a, b: a + b)(3, 7))
>>> 10
>>> 10
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
def my_key(x):
return x[1]
print(sorted(array, key=my_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]
실전에서 유용한 표준 라이브러리 🔥
- 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
- 파이썬 프로그램을 작성할 때 없어서는 안 되는 필수적인 기능을 포함
- itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
- 특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용
- heapq : 힙(Heep) 자료구조를 제공
- 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
- bisect : 이진 탐색(Binary Search) 기능을 제공
- collections : 덱(Deque), 카운터(Counter) 등의 유용한 자료구조를 포함
- math : 필수적인 수학적 기능을 제공
- 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(Pi)와 같은 상수를 포함
result = sum([1, 2, 3, 4, 5])
print(result)
min_result = min(7, 3, 5, 2)
max_result = max(7, 3, 5, 2)
print(min_result, max_result)
result = eval("(3+5)*7")
print(result)
>>> 15
>>> 2 7
>>> 56
result = sorted([9, 1, 8, 5, 4])
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)
print(result)
print(reverse_result)
array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)
>>> [1, 4, 5, 8, 9]
>>> [9, 8, 5, 4, 1]
>>> [('이순신', 75), ('아무개', 50), ('홍길동', 35)]
순열과 조합 🔥
- 모든 경우의 수를 고려해야 할 때 어떤 라이브러리를 효과적으로 사용할 수 있을까?
- 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
- {'A', 'B', 'C'}에서 세 개를 선택하여 나열하는 경우 : 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
- 조합 : 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것
- {'A', 'B', 'C'}에서 순서를 고려하지 않고 두 개를 뽑는 경우 : 'AB', 'AC', 'BC'
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))
print(result)
>>> [('A','B'), ('A','C'), ('B','C')]
Counter
- 파이썬 collections 라이브러리의 Counter는 등장 횟수를 세는 기능을 제공
- 리스트와 같은 반복 가능한(Iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려줌
from collections import Counter
counter = Couter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue'])
print(counter['green'])
print(dict(counter))
>>> 3
>>> 1
>>> {'red': 2, 'blue': 3, 'green': 1}
최대 공약수와 최소 공배수
- 최대 공약수를 구해야 할 때는 math 라이브러리의 gcd() 함수 이용 가능
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