파이썬 알고리즘 인터뷰 라는 책으로 코딩테스트 연습을 해보고자 한다.
각각의 장에서 배운 것들을 정리하고 익히도록 하겠다 ~.~
책을 활용하면서 필요한 것들
문제 풀이 소스코드 다운 및 학습 동영상
1. 깃허브 소스코드 : https://github.com/onlybooks/python-algorithm-interview
2. 유튜브 학습 동영상 : https://www.youtube.com/watch?v=ngHIVey3J6Y
2장 프로그래밍 언어 선택
# 파이썬을 활용한 루프 구조 구현
파이썬은 한 줄로도 루프 구현 가능
그러나 지나친 사용은 가독성을 떨어뜨릴 수 있으므로 적절하게 사용하는 것이 중요.
#파이썬(Python)
# 예시 1
sum = 0
for i in range(1, 10 + 1):
sum += i
# 예시 2
sum = sum(i for i in range(1, 10 + 1))
# 예시 3
sum = sum(range(1, 10 + 1))
# 제네릭 프로그래밍
파이썬은 동적 파이핑 언어로 *제네릭이 필요 없다
(* 제네릭 : 파라미터의 타입이 나중에 지정되게 하여 재활용성을 높일 수 있는 프로그래밍 스타일)
def are_equal(a, b):
return a == b
are_equal(10, 10.0)
하지만 이는 장단점이 확실하다. 사용하기에는 매우 편하지만, 코드의 복잡성이 높아질 수 있다.
그래서 다음과 같이 타입을 명시하는 방법도 있다.
<타입 힌트를 통해 제네릭을 사용하는 방법>
from typing import TypeVar
T = TypeVar('T')
U = TypeVar('U')
def are_equal(a: T, b: U) -> bool:
return a == b
are_equal(10, 10.0)
파이썬은 동적 파이핑 언어이지만,
이렇게 타입을 명시하면 가독성이 좋아지며 버그 발생 확률을 줄일 수 있다.
# 배열 반복
파이썬은 다른 언어에 비해 문자열 자료형이라는 선언 조자 필요가 없다.
#Python
foo = ['A', 'B', 'C']
for f in foo:
print(f)
#Java
String[] foo = new String[]{"A", "B", "C"};
for (String f : foo) {
System.out.println(f);
}
# 구조체
배열 : 순차적으로 메모리를 할당함.
구조체 : 메모리의 어느 영역에나 어떤 크기로든 할당할 수 있는 복합 자료형.
파이썬에는 구조체가 없을 뿐더러, 클래스 또한 데이터 타입을 지정할 수 없다.
구조체와 같은 형태를 정의하려면 네임드 튜플을 사용해야 한다.
from collections import namedtuple
MyStruct = namedtuple("MyStruct", "field1 field2 field3")
m = MyStruct("foo", "bar", "baz")
파이썬 3.7 부터는 dataclass 를 지원한다. @dataclass 데코레이션(자바에서는 어노테이션) 으로
다음과 같이 class를 이용해 구조체 형태로 정의 가능하다.
from dataclasses import dataclass
@dataclass
class Product:
weight: int = None
price: float = None
apple = Product()
apple.price = 10
# 클래스
파이썬에서의 클래스는 위에 언급한 dataclass 데코레이션을 이용해 클래스를 선언한다.
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
def area(self):
return self.width * self.height
rect = Rectangle(3, 4)
print(rect.area)
출처 : 파이썬 알고리즘 인터뷰 | 박상길
'코딩테스트' 카테고리의 다른 글
[python] 파이썬 알고리즘 인터뷰 - 빅오, 자료형 (0) | 2024.02.28 |
---|---|
[python] 파이썬 알고리즘 인터뷰 : 2일차 - 파이썬 문법 (0) | 2024.02.02 |
[kotlin] leetcode - 283. Move Zeroes (0) | 2022.05.02 |
[kotlin] leetcode - Squares of a Sorted Array (0) | 2022.04.27 |
[kotlin] leetcode - Search Insert Position (0) | 2022.04.27 |