Python 알고리즘(1)_파이썬 알고리즘 인터뷰

hjseo-dev·2021년 6월 2일
0

Python 알고리즘

목록 보기
5/13
post-thumbnail

📖 파이썬 알고리즘 인터뷰

이번에 지인에게 추천받은 파이썬 알고리즘 인터뷰 라는 책을 샀다.
코딩 책은 많이 사서 읽는 편이 아니지만, 알고리즘 공부에 도움이 될 것 같아 구매했다.

읽다보니 꽤 잘 정리된 것 같고, 내 생각보다 몰랐던 부분이 많아서 앞으로 정리하면서 읽어야지 하고 생각했다.
이 책에 나온 파이썬 문법을 나름대로 요약해서 정리해보고자 한다.
그럼 시작!!

✍️ 문법&용어정리

1. 인덴트

파이썬의 특징 중 하나이며 공식 가이드인 PEP8(파이썬 개선 제안서)에 따라 공백 4칸을 원칙으로 한다.

def long_funciton_name(var_one, var_two, var_three, var_four):
	print(var_one)

파이참 도구를 쓰면 행 구분을 자동으로 해준다!

2. 네이밍컨벤션

파이썬의 변수명, 함수명 네이밍컨벤션은 각 단어를 밑줄로 표기하는 스네이크 케이스를 따른다.
카멜케이스와 반대되는 성격이다. (자바의 표기 방법)

camelCase: int = 1 
snake_case: int = 1

3. 타입힌트

타입 힌트는 가독성을 위해 필요하다. 필수는 아니지만 나중에 긴 코드를 봤을 때 버그 발생 확률을 줄일 수 있다.

a: str = "1"
b: int = 1
def fn(a: int) -> bool:

mypy를 사용하면 타입 힌트에 오류가 없는지 확인이 가능해 수정할 수 있다.

4. 리스트 컴프리헨션

기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문

# 리스트 컴프리헨션 사용
[n * 2 for n in range(1, 10+1) if n % 2 == 1]

# 일반적 코드
a = []
for n in range(1, 10 + 1):
	if n % 2 == 1:
    	a.append(n * 2)

한줄로 간결하게 표현 되지만, 복잡하게 쓰면 가독성을 떨어뜨린다. 표현식은 2개가 넘지 않아야 한다.

5. 제너레이터
루프의 반복동작을 제어할 수 있는 루틴형태, yield 구문을 사용하여 리턴한다.
큰 숫자인 경우 필요할 때만 생성하여 차지하는 메모리 양을 줄여준다.
return 구문은 함수를 종료하지만, yield 구문을 만나면 여기까지 실행중인 값을 내보내 중간 값을 리턴하고 함수를 종료시키지 않고 끝까지 실행된다.

def get_natural_number():
	n = 0
    while True:
    	n += 1
        yield n  # 리턴 값이 제너레이터가 된다.
        
g = get_natural_number()
for _ in range(0,100):
	pring(next(g))	# 다음 값을 생성하려면 next()를 수행한다. 

대표적인 함수로 range() 가 있다. 주로 for 문에서 쓰이며 제너레이터의 next()를 호출하듯 다음 수를 생성한다.

a = [n for n in range(1000000)]
b = range(1000000)

sys.getsizeof(len(a))  #8697494
sys.getsizeof(len(b))  #48

차지하는 메모리 수가 다르다.

6.enumerate

enumerate()는 열거하다 라는 뜻의 함수로 여러가지 자료형을 인덱스를 포함한 enumerate 객체로 리턴한다.

a = ['a1', 'b1', 'c1']

for i in range(len(a)):
	print(i, a[i])  

for i, v in enumerate(a):
	print(i, v)
    
# 모두 [(0,a1),(1,b1),(2,c1)]의 결과를 반환하지만 아래 방법이 더 깔끔하다

7. 나눗셈 연산자
'/'연산자는 나눗셈을 표현해 소수점 이하 자리까지 표현되고, '//' 연산자는 몫을 구할 때 사용한다.

5 / 3 => 1.666666667
5 // 3 => 1

동시에 몫과 나머지를 구하려면 divmod() 함수를 사용한다.

divmod(5,3)
= (1,2)

8. print

print 함수는 값을 출력할 때 사용하며 sep 파라미터로 구분자를 지정할 수 있다.

print('A1','B1',seq=',')
= A1,B1

end 파라미터를 공백자로 지정하여 줄바꿈을 하지 않도록 제한할 수 있다.

print('aa', end=' ')
print('bb')
= aa bb

리스트를 출력할 때는 join()으로 묶어서 처리한다.

a = ['A', 'B']
print(' '.join(a))
= A B

f-string 방법을 써서 변수를 출력할 수 있다.

idx = 1
fruit = "Apple"
print('{0}: {1}'.format(idx+1, fruit))  # 인덱스를 활용해서 함께 출력할 수 있다
print(f'{idx+1}:{fruit}')   #f-string으로 바로 출력할 수 있다
= 2 : Apple

9. pass

코드를 실행하지 않는 부분에 넣어서 오류를 발생하지 않도록 한다. null 연산의 역할로 아무것도 하지 않는 기능을 가지고 있다.

0개의 댓글