알고리즘과 자료구조를 공부하려고 합니다. 교재는 이지스퍼블리싱사에서 발행한 <Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편>을 사용합니다. 전체적인 내용을 교재로 공부한 다음, 코세라로 알고리즘 및 자료구조 강의를 수강할 계획입니다.

 

책 목차

01. 알고리즘 기초

01-1. 알고리즘이란?

01-2. 반복하는 알고리즘

02. 기본 자료구조와 배열

03. 검색 알고리즘

04. 스택과 큐

05. 재귀 알고리즘

06. 정렬 알고리즘

07. 문자열 검색

08. 리스트

09. 트리


01-1 알고리즘이란?

세 정수의 최댓값 구하기

실습 1-1. 세 정수의 최댓값 구하기

저는 노가다를 좋아하기 때문에 다음과 같이 썼습니다.

a = int(input('첫번째 정수 입력: '))
b = int(input('두번째 정수 입력: '))
c = int(input('세번째 정수 입력: '))

if a > b:
    if a > c:
        result = a
    else:
        result = c
else:
    if b > c:
        result = b
    else:
        result = c

print('최댓값', result)

이렇게 하는 대신에 처음부터 a를 기준으로 세우는 방법이 있습니다. a가 최댓값이라고 설정하고 시작하는 것입니다.

a = int(input('첫번째 정수 입력: '))
b = int(input('두번째 정수 입력: '))
c = int(input('세번째 정수 입력: '))

result = a
if b > result:
    result = b
if c > result:
    result = c

print('최댓값', result)

- 순차 구조(sequential structure) : 한 문장씩 순서대로 처리되는 구조

- 선택 구조(select structure) : 조건식으로 평가한 결과에 따라 프로그램의 실행 흐름이 변경되는 구조

- 형 변환(type conversion) : 문자열형을 정수형으로 변환하는 과정

 

* >>> : 파이썬의 대화형 인터프리터 - 파이썬 셸(shell), 프롬프트

* float는 부동 소수점 방식을 사용 ; 부동 소수점(floating poing)은 실수를 근삿값으로 표현. 실수를 가수 부분과 지수 부분으로 나누어 표현. 가수 부분은 유효 숫자를 나타내고, 지수 부분은 소수점의 위치를 나타냄.

 

알고리즘의 순서도

알고리즘(프로그램)이 흐르는 방향은 조건식이 결정합니다.

 

- 양 갈래 선택 : 작성한 조건식에 따라 알고리즘의 흐름이 두 갈래로 나뉘는 것

* 복합문의 구조 : if나 while과 같은 키워드로 시작해 콜론(:)으로 끝나는 부분을 헤더(header)라고 함. 콜론(:)은 '바로 뒤에 스위트가 이어집니다'를 의미함.

 

실습 1-2. 세 정수의 최댓값을 구하는 함수 작성하기

def max3(a, b, c):
    result = a
    if b > result : result = b
    if c > result : result = c
    return result

print(max3(1, 384, 5))

* 함수의 반환값과 함수 호출식 평가하기: return문을 사용해 함수 내부에서 처리한 값을 반환함. "함수 호출식을 평가해야 함수가 반환한 값을 얻을 수 있다."

 

- 알고리즘 : 어떠한 문제를 해결하기 위해 정해 놓은 일련의 절차

- 올바른 알고리즘이란? 어떠한 경우에도 실행 결과가 똑같이 나오는 알고리즘입니다.

 

* 복합문 작성 규칙: 스위트가 단순문이면 헤더와 같은 행에 둘 수 있음. 단순문이 2개 이상이면 각각의 단순문을 세미콜론(;)으로 구분하여 헤더와 같은 행에 둘 수 있음. 세미콜론을 마지막 단순문 뒤에 놓을 수도 있음.

if a < b: min2 = a            # 단순문 1개
if a < b: min2 = a; max2 = b  # 단순문 2개
if a < b: min2 = a; max2 = b; # 단순문 2개 (세미콜론 추가)

* 표기법 약속 : 참고글

 

* 세 정수의 대소 관계 : 세 정수 a, b, c의 대소 관계 조합은 13가지.

세 정수 a, b, c의 대소 관계 조합

 

* 세 정수의 중앙값 : 세 정수의 중앙값을 구하는 데 여러 방법이 있습니다.

# 방법1
def med3(a, b, c):
    if a >= b :
        if b >= c:
            return b
        elif a <= c:
            return a
        else:
            return c
    elif a > c:
        return a
    elif b > c:
        return c
    else:
        return b

# 방법2
def med3(a, b, c):
    if (b >= a and c <= a) or (b <= a and c >= a):
        return a
    elif (a > b and c < b) or (a < b and c > b):
        return b
    return c

방법2가 방법1보다 짧지만, 효율은 좋지 않습니다. 첫번째 if문에서 b >= a 그리고 b <= a 의 판단을 거치게 되는데, 이 if문이 거짓이면 다음 elif문에서 이를 뒤집은 a > b 그리고 a < b 의 판단을 수행하고 있습니다. a와 b의 비교를 이미 마친 상태에서 다시 비교하는 것은 효율적이지 않습니다.

 

조건문과 분기

실습 1-3. 세 정수의 최댓값을 구하는 함수

정숫값의 부호(+, -, 0)를 출력합니다.

def check(a):
    if a > 0: print('양수')
    elif a < 0: print('음수')
    else: print('영')

이 프로그램은 3개로 분기해, 그중 하나만 실행됩니다.

실습 1-4. 3개로 분기하는 조건문

n = int(input('정수를 입력하세요: '))

if n == 1:
    print('A')
elif n == 2:
    print('B')
else:
    print('C')

실습 1-5. 4개로 분기하는 조건문

n = int(input('정수를 입력하세요: '))

if n == 1:
    print('A')
elif n == 2:
    print('B')
elif n == 3:
    print('C')

 

두 프로그램은 코드 분량이 같지만 흐름이 다릅니다. 실습 1-4는 3개 흐름으로 분기하지만 실습 1-5는 4개 흐름으로 분기합니다. n이 1, 2, 3이 아니면 아무것도 출력하지 않기 때문입니다.

실습 1-6. 4개로 분기하는 조건문

n = int(input('정수를 입력하세요: '))

if n == 1:
    print('A')
elif n == 2:
    print('B')
elif n == 3:
    print('C')
else:	# 이 else문이 숨어있습니다.
    pass

 

* 연산자와 피연산자 : a > b 에서 '>'는 연산자이고 'a, b'는 피연산자입니다. 피연산자의 개수에 따라 연산자는 아래와 같이 분류됩니다.

- 단항 연산자 : -a

- 이항 연산자 : a < b

- 삼항 연산자 : a if b else c

* 조건 연산자: if~else 문은 파이썬의 유일한 삼항 연산자입니다. 

a = x if x > y else y
print('c는 0입니다.' if c == 0 else 'c는 0이 아닙니다.')

 

순서도 기호 살펴보기

순서도 : 문제를 정의, 분석하고 해결하는 방법을 그림으로 표현

 

데이터

기억 장치를 지정하지 않은 데이터 자체

처리

정보의 값, 형, 위치를 바꾸도록 정의한 연산이나 연산 집합의 실행, 또는 연속하는 몇 가지 흐름 가운데 하나의 방향을 결정하는 연산이나 연산 집합의 실행을 나타냄

미리 정의한 처리

서브루틴이나 모듈 등 다른 곳에서 이미 정의한 하나 이상의 연산 또는 명령으로 이루어진 처리

 

판단

하나의 입구와 하나 이상을 선택하는 출구가 있음

판단 기호 안에 정의한 조건을 평가하여 하나의 출구를 선택하는 판단 기능(스위치형 기능)을 나타냄

주로 예상되는 평가 결과는 경로를 나타낸 선 가까이 표기함

 

루프 범위

루프의 시작과 종료를 나타내는 두 부분이 존재함

루프의 시작 기호 또는 종료 기호 안에 초깃값, 증갓값, 종룟값(또는 종료 조건)을 표기함

i를 1부터 n까지 1씩 증가시키며 처리를 n번 반복

 

제어의 흐름

흐름의 방향을 분명히 나타낼 때는 화살표를 사용

 

단말

외부 환경으로 나가거나 외부 환경에서 들어오는 것

주로 프로그램 흐름의 시작과 종료를 나타냄

 

'컴퓨터' 카테고리의 다른 글

[Windows] Ubuntu 로 CLX, cudf 사용하기  (0) 2021.04.27
[COMPAS] geojson 파일 시각화하기  (0) 2021.03.09
복사했습니다!