Introduction

본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다.

자료형

  • 모든 프로그래밍 언어는 결국 데이터를 다루는 행위입니다. ⇒ 따라서 들어오는 자료를 어떻게 처리하는지를 이해하는 것은 프로그래밍의 첫 걸음이라 할 수 있습니다.
  • Python 의 자료형 : 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등 ⇒ 저수준의 언어들과 비교하면 매우 다양한 기능 지원하며 자료형 마다의 특징을 이해함은 코딩시 매우 편리합니다.

정수형

  • 정수형(integer)은 정수를 다루는 자료형입니다. (양의 정수, 0, 음의 정수 포함)
  • 코딩 테스트의 많은 유형이 정수 자료형을 다룹니다. 기본적으로 대부분의 프로그램과 수치는 실수보단 정수형으로 사용합니다.
a = 1000
print(a)

# 실행 결과
# 양음 모두 가능.

$
1000

실수형

  • 실수형은 소수점 아래의 데이터를 포함하는 수 자료형입니다.
  • 파이썬에선 변수에 소수점 을 붙인 수를 대입하면 실수형 변수로 처리가 되고, 명시적 선언을 추가적으로 할 필요는 없습니다.
  • 소수부가 0, 정수부가 0인 소수는 0을 생략하고 작성할 수 있습니다.
a = .7

b = 5.

c = -.44123

print(a, b, c)

# 실제 출력물
$
0.7 5.0 -0.44123

지수 표현 방식

  • 파이썬에서는 e나 E를 이용한 지수 표현 방식을 말합니다.

    • e, E 다음 오는 숫자는 10의 지수부 입니다. 유효숫자e^{지수} = 유효숫자 × 10ᴺ 1e9 = 1 × 10⁹ = 1,000,000,000
    • 지수 표현 방식은 임의의 큰 수를 표현하기 위해 사용됩니다.
    • 최단 경로 알고리즘에서는 도달할 수 없는 노드에 대하여 최단 거리를 무한(INF)로 설정하는데 사용합니다.
    a = 1e9 # 양의 지수를 활용한 큰 수 표현
    print(a)
    
    a = 75.25e1
    print(a)
    
    a = 3954e-3 # 음수를 활용하여 보다 작은 수를 표현하는 것도 가능하다.
    print(a)
    
    # 출력 결과
    1000000000.0
    752.5
    3.954
    
    # 실수 연산에선 오차가 발생할 수 있고, 이에 정수로 바꾸어 출력하는 것은 알고리즘을 위한 좋은 코딩 습관이다.
    a = int(1e9)
    print(a)
    # 1000000000

실수형

  • 가장 많이 쓰이고 있는 IEEE754 표준에서는 실수형을 저장하기 위해 4, 8바이트 고정크기 메모리 할당을 진행됩니다. 이는 C의 float, double 에 해당한다고 보시면 됩니다. 이때 핵심은 실수 정보표현에 있어 컴퓨터는 정확한 계산이 불가능하다는 점입니다.
  • 예를 들어 10진수 체계에서는 0.3과 0.6을 더한 값이 0.9로 정확히 떨어지지만, 2진수 체계에선 0.9를 정확하게 표현이 안되며 에러가 발생할 수 있습니다.
a = 0.3 + 0.6
print(a)

if a == 0.9:
	print(True)
else:
	print(False)

# 실행결과
0.8999999999999
False
  • 따라서 이는 프로그램 개발 과정에서 실수 값을 제대로 비교하지 못해서 원하는 결과와 다른 결과를 만날 수 있습니다.
  • 이에 사용하는 것이 코딩하면서 기억하면 좋은 것이 round() 함수입니다.
    • 123.456 → round(123.456, 2) ⇒ 123.45 : 반올림을 통해 근사값의 기준을 명확히 세우고, 이로써 프로그램에서 오류가 생기는 경우를 최소화 합니다.

수 자료형의 연산

  • 수 자료형에 대하여 사칙연산과 나머지 연산자를 사용할 수 있고, 기본적으로는 C와 유사한구조를 갖고 있습니다.
  • /나누기 연산자 → 실수형 반환함 ; 정수형 나누기는 // 몫 연산자를 사용해야 합니다.
  • 나머지 연산자는 %는 C의 그것과 동일합니다.
  • 거듭제곱 연산자 ** 를 비롯해서 다양하고 편리한 연산자가 추가로 존재합니다.

🧑🏻‍💻 알고리즘 박살내기 시리즈🧑🏻‍💻