※ 공부 목적으로 책의 내용 정리하는 글
오프라인 화이트보드 코딩 인터뷰 경우 실제 실행되는 언어로 코딩하기 불가능.
- 수도코드(Pseudocode): 컴퓨터 프로그랭ㅁ의 작동 원리 또는 알고리즘을 형식이 정해져 있지 않은 고차원 언어로 기술한 것
- 수도코드는 대개 일정한 규칙을 준수하지만 기계가 판독하려는 용도가 아닌, 사람이 쉽게 알아볼 수 있는 형태로 기술
# 수도코드 예제
함수 fizzbuzz()
for i = 1 to 100
print_number = True
if i is 3으로 나눌 수 있다면
print "Fizz"
print_number = False
if i is 5로 나눌 수 있다면
print "Buzz"
print_number = False
if print_number = True
print i
print 빈 줄
이처럼 다양한 알고리즘을 표현할 수 있으며 자유도가 매우 높다.
C++은 매우 효율적이고 표준 라이브러리가 많아서 신입 공채 코딩 테스트(17년 카카오 신입 공채 기준)에서 높은 비중을 차지한다. 합격자 비율 또한 가장 높은 축에 속한다. 하지만 평균적으로 가장 긴 코드 라인을 기록한다.
이에 비해 파이썬은 C++의 약 60% 수준의 라인 수를 보이며 C++과 근소한 차이로 높은 합격률을 보인다.
| 제네릭 프로그래밍
제네릭(generic): 파라미터의 타입이 나중에 지정(to-be-specified-later)되게 해서 재활용성을 높일 수 있는 프로그래밍 스타일
각 언어별 제네릭 프로그래밍 문법 살펴보자. 실행 결과에 대해서는 상관하지 않고 문법의 구조와 코드의 형태 중심으로만 살펴본다.
C++은 템플릿이라는 기능을 통해 제네릭 프로그래밍 구현
// C++
template<class T, class U>
bool are_equal(T a, U b) {
return (a == b);
}
are_equal(10, 10.0)
# Python
def are_equal(a, b):
return a==b
are_equal(10, 10.0)
파이썬은 원래 동적 타이핑(Dynamic Typing) 언어이기 때문에 제네릭이 필요 없다. 하지만 동적 타이핑의 장점이자 단점은 얼핏 사용하기엔 매우 편하지만 코드의 복잡도가 높아질수록 혼란을 가중시킨다는 점이다.
타입을 아예 명시하지 않으면 가독성을 낮추고 버그 발생 확률이 높아진다. 따라서 다음과 같이 타입을 명시할 수 있다.
# Python
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)
| 구조체
// C++
struct Product {
int weight;
double price;
};
Product apple;
apple.price = 10;
# Python 3.7+
from dataclasses import dataclass
@dataclass
class Product:
weight: int = None
price: float = None;
apple = Product()
apple.price = 10
| 클래스
코딩 테스트에서는 클래스까지 사용할 일이 드물지만 현대 프로그래밍 언어에서 빼놓을 수 없는 필수 기능
클래스는 C++의 가장 큰 특징 중 하나로 구조는 크게 선언부와 구현부로 구분할 수 있다.
// C++
// 선언
class Rectangle {
int width, height;
public:
rectangle(int, int);
int area();
};
// 구현
Rectangle::Rectangle(int x, int y) {
width = x;
height = y;
}
int Rectangle::area() {
return width * height;
}
Rectangle rect(3, 4);
std::cout << rect.area() << std::endl;
여기서는 하나의 파일로 표시했지만 헤터 파일과 소스 파일로 각각 분리할 수 있으며 이처럼 선언과 구현을 분리하는 방식은 컴파일 속도를 높일 수 있는 등 여러모로 장점이 있다.
# Python
from dataclasees import dataclass
@dataclass
class Rectangle:
width: int
heigth: int
def area(self):
return self.width * self.height
rect = Rectangle(3, 4)
print(rect.area())
'개발자 도전기 > [STUDY] etc' 카테고리의 다른 글
백엔드 개발자에게는 정말 중요하다는 멀티 스레드! 자바의 멀티 스레드와 노드의 싱글 스레드 성능 튜닝 훑어보기 (1) | 2024.04.26 |
---|---|
공부노트 | 파이썬 알고리즘 인터뷰 | 1장 코딩 인터뷰 (0) | 2021.10.27 |
댓글