[python] 알고리즘 풀이를 위한 파이썬 기초공부!
갑자기 파이썬은 왜..? 🤣
예전부터 알고리즘과는 별로 친하지 않았기때문에, 개발만 열심히 공부하면 되겠지란 생각으로 안일하게 살아왔었다.
하지만, 취업이 다가오면서 열심히 알아보다보니 코테는 거의 필수라는걸 느꼈다. 여태 난 뭐한거지 현타가 와서 축 쳐져있다가 이러고 있는 시간도 사치라는 생각이 들어서 정신차리고 코테에 대해서 열심히 알아보기 시작했다.
여지껏, 주언어라고 하기에는 부끄럽지만 코틀린만을 쭉 써왔던 나였기에, 코테도 코틀린으로 준비해야겠다라는 생각을 가지고 있었다. 하지만, 알아본 결과, 대부분의 사람들이 파이썬과 c++을 언어로 사용하는 것이 코테에서 효율성과 간편성 면에서 더 좋다라고 말하길래, 과감하게 새로운 언어를 해보자! 생각하고 조금 더 흥미가 가는 파이썬을 시작해보기로 했다.
기초부분은 다른언어들의 기초에서 크게 벗어나지 않는 것 같아 기존 언어들과 다른부분들 위주로 공부해볼 예정이다.
유튜브 나동빈님의 강의를 바탕으로 공부한 내용입니다.
파이썬에서의 들여쓰기와 주석
- 파이썬에서의 들여쓰기는 같은 블록 내에서는 무조건 들여쓰기 칸 수가 같아야 된다. 탭이던, 공백이던 같은 크기만큼 들여써줘야 한다. 주석은 // 이 아닌 #으로 시작한다.
빠른 입력
import sys
data = sys.stdin.readline().rstrip()
print(data)
- rstrip() - 입력하는 값의 좌우 공백을 제거해준다
출력
print(7, end=" ")
- end=" " - 기본적으로 print() 함수는 출력이 완료되면 줄바꿈이 이루어지는데 end=" "를 사용하면 줄바꿈을 하지 않는다.
print("정답은 " + str(answer) + "입니다."
- 상수형을 출력할 때는 str형으로 변환해서 사용해야 한다.
f-string
answer = 7
print(f"정답은 {answer}입니다.")
- print() 함수 시작에 f를 넣어주면 f-string형이 되어 상수형을 str형으로 변환하지 않아도 { } 안에 넣어 사용할 수 있다.
if문
if score >= 90:
print("학점: A")
elif score >= 80:
print("학점: B")
else:
print("학점: C")
- if문을 열때 "{" 가 아닌 ":"로 시작한다.
- elseif를 elif라고 쓴다.
pass
if a >= 30:
pass
else:
print("a < 30")
- pass는 디버깅 과정중 조건문을 일단 무시하고 처리하고 싶을 경우에 사용한다.
조건문 간소화
score = 85
result = "Success" if score >= 80 else "Fail"
- 위와 같이 조건이 많지 않을 경우 한줄로 간편하게 사용할 수 있다.
부등식
x = 15
if 0 < x < 20:
print("0과 20사이의 수입니다")
- 부등식을 수학에서 사용하던 것처럼 and나 or을 사용하지 않고도 한번에 식을 만들 수 있다.
while문
i = 1
result = 0
while i <= 9:
result += i
i += 1
print(result)
- 역시 다른언어와 다른점은 " : " 으로 시작한다는 점
break
i = 1
while True:
print("i값 : ", i)
if i == 5
break
i += 1
- i가 5일땐 i += 1을 실행하지 않고 종료
add
def add(a,b):
return a+b
print(add(3,7))
------------------
def add(a,b):
print('함수의 결과 : ', a+b)
add(3,7)
- 위 아래 모두 수식의 값으로 10을 받는다.
global
a = 10
def func():
global a
a += 1
func()
print(a)
- def안에 전역변수를 불러오는 역할을 한다. 위의 코드에서 global a가 빠지면 오류가 난다.
다중반환값
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)
- 위 수식을 실행하면 a, b, c, d에 각각 순서대로 +, -, *, / 가 operator의 인자들을 계산한 값을 출력한다.
람다표현식
print((lambda a, b: a + b)(3,7))
- 위 수식같이 한줄로 작성해도 add(3,7)과 같은 역할을 한다.
map
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]
- list1과 list2를 더하는 람다식에 map함수가 붙어서 리스트의 각각 원소들끼리 더한값을 출력한다.
표준 라이브러리
- itertools : 파이썬에서 반복형태를 처리하기 위한 기능을 제공한다. (순열, 조합 라이브러리를 자주 사용한다.
- heapq : 힙 자료구조를 제공한다. (우선순위 큐 기능 구현 위해 사용한다.)
- bisect : 이진탐색 기능을 제공한다.
- collections : 덱, 카운터 등의 자료구조를 포함한다.
- math : 필수적인 수학기능을 제공 (팩토리얼, 제곱근, 최대공약수, 삼각함수, 파이등의 상수 포함)
내장함수
- sum()
- min(), max()
- eval() - 수식의 결과를 반환한다.
- sorted() : 기본적으로 오름차순으로 정렬해주며 reverse=True를 입력하면 내림차순으로 정렬된다
array = [('홍길동',25),('이순신',47),('김춘자',85)]
sorted(array, key=lambda x: x[1], reverse=True)
위의 코드는 array배열의 (이름, 점수) 쌍의 1번인덱스 값을 기준으로 내림차순 정렬 하는것이다. 점수가 높은순서데로 내림자순 정렬된다.
순열
- 서로 다른 n개에서 서로 다른 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')]
- 순서를 가지기 때문에 같은 문자들이어도 순서가 다르면 만들 수 있다.
조합
- 서로 다른 n개에서 순서상관없이 서로 다른 r개를 선택하여 나열하는 것. (순서 x)
from itertools import combinations
data = ['A','B','C']
result=list(combination(data,2))
print(result)
출력 -> [('A','B'),('A','C'),('B','C')]
- 순서를 가지지 않기때문에 다른 조합에서 사용되었던 문자 2개쌍은 중복될 수 없다.
중복순열
from itertools import product
data = ['사과', '배', '귤']
result = list(product(data, repeat=2))
print(result)
출력 -> [('사과', '사과'), ('사과', '배'), ('사과', '귤'), ('배', '사과'), ('배', '배'),
('배', '귤'), ('귤', '사과'), ('귤', '배'), ('귤', '귤')]
- product를 사용하면 순열에서 중복을 허용한다. 위의 출력을 보면 알 수 있듯이 자기 자신과도 순열이 된다.
중복조합
from itertools import combinations_with_replacement
data = ['사과', '배', '귤']
result = list(combinations_with_replacement(data, 2))
print(result)
출력 -> [('사과','사과'),('사과','배'),('사과','귤'),('배','배'),('배','귤'),('귤','귤')
- 중복순열과 다른점은 중복을 허용하긴 하지만 이전에 선택된 것들이 배제된다.
Counter
from collections import Counter
counter = Counter(['red','blue','green'])
print(counter['red'] # red 등장횟수 출력
print(dict(counter)) # 사전자료형으로 변환
최대공약수(gcd), 최소공배수(lcm)
import math
def lcm(a,b):
return a*b // math.gcd(a,b)
a = 21
b = 14
print(math.gcd(a, b)) # 최대공약수 계산
print(lcm(a, b)) # 최소공배수
Author And Source
이 문제에 관하여([python] 알고리즘 풀이를 위한 파이썬 기초공부!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@heymoko/python-알고리즘-풀이를-위한-파이썬-기초공부저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)