본문 바로가기
코딩테스트

[python] 파이썬 알고리즘 인터뷰 : 1일차

by 얘리밍 2024. 2. 1.
320x100
728x90

 

 

파이썬 알고리즘 인터뷰 라는 책으로 코딩테스트 연습을 해보고자 한다. 

각각의 장에서 배운 것들을 정리하고 익히도록 하겠다 ~.~

 

 

 

 

책을 활용하면서 필요한 것들 

문제 풀이 소스코드 다운 및 학습 동영상

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)

 

 

 

 

 

 

출처 : 파이썬 알고리즘 인터뷰 | 박상길

728x90
반응형