[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)) # 최소공배수

좋은 웹페이지 즐겨찾기