Rev Notebook

0. 알고리즘

by Rev_

알고리즘이란?

알고리즘이란 무엇일까

우리는 어떠한 프로그램을 짜기 위해서 다양한 방법을 시도한다.

그것이 반복적인 노가다 작업일 수도 있고, 효율적인 코드를 짜는 방법일 수도 있다.

즉, 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법알고리즘이라고 한다.

올바른 알고리즘은 어떠한 경우에도 실행 결과가 똑같이 나오는 것을 말한다. 알고리즘의 실행 결과가 특정 경우에만 맞고 다른 경우에는 틀리다면 올바른 알고리즘이라고 할 수 없다. 

 

일반적으로 코드들은 순차적으로 실행된다. 한 문장씩 순서대로 처리되는 구조를 순차 구조라고 한다.

그리고 조건식(if 등)이 포함된다면 프로그램의 실행 흐름이 변경되는데, 이러한 구조를 선택 구조라고 한다.

 

이제 파이썬에서 사용되는 간단한 알고리즘들을 알아보도록 하자.

 

문자열과 숫자 입력받기

print('이름을 입력하세요: ', end = '')
name = input()
print(name)
name = input('이름을 입력하세요: ')
print(f'내 이름은 {name}')

위와 같이 이름을 입력받고 출력하는 프로그램을 만든다고 가정하면, input() 안에 입력받는 텍스트를 출력하여 3줄을 2줄로 나타낼 수 있다. 이렇게 하면 print() 함수 호출을 생략할 수 있다.

또한 f를 이용한 포맷팅을 사용하여 문자열 안에 변수를 넣어 출력해줄 수도 있다. 이 f를 이용한 포맷팅은 파이썬 3.6부터 지원하는 방식이며, 가장 빠른 속도를 지원한다.

 

조건문과 분기

n = int(input())

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

위는 4개의 분기로 이루어진 파이썬의 조건문이다.

각각 조건에 맞는 print()문이 실행되고, 그 외의 값이 입력되면 pass문이 실행된다. 이는 아무것도 하지않고 통과하는 코드이다.

 

연산자와 피연산자

프로그래밍 언어에서는 기호를 산술 연산자(operator)라고 하고, 연산 대상을 피연산자(operand)라고 한다. 연산자는 아래와 같이 3개로 분류된다.

  • 단항 연산자(unary operator) ex) -a
  • 이항 연산자(binary operator) ex) a < b
  • 삼항 연산자(ternary operator) ex) a if b else c

이는 피연산자의 개수에 의하여 결정된다.

이 중 if~else문은 파이썬의 유일한 삼항 연산자이며, 조건 연산자이다.

 

반복문

n = int(input('1부터 n까지의 정수의 합: '))
sum = 0
i = 1

while i <= n:
    sum += i
    i += 1
print(sum)

대표적인 반복문으로는 for문while문이 있다.

위는 특정 숫자를 입력받으면 1부터 해당 숫자까지의 합을 구해주는 코드이다.

이떤 조건이 성립하는 동안 반복해서 처리하는 것을 반복 구조라 하고, 일반적으로 루프(loop)라고 한다. 그리고 특히 while문은 반복을 계속 수행하기 전에 반복을 계속할 것인지를 판단하는데 이런 구조를 사전 판단 반복 구조라고 한다.

 

while True: 와 같은 무한 루프문도 있는데, 이 반복문 안에서 break문을 실행하면 반복문을 종료할 수 있다. 다른 언어에서는 do~while문이나 repeat~until문 등 대표적인 사후 판단 반복문을 지원하지만, 파이썬은 그런게 없기 때문에 break문을 사용하여야 한다.

 

n = int(input('1부터 n까지의 정수의 합: '))
sum = 0
for i in range(1, n+1):
    sum += i
print(sum)

위는 for문을 이용한 1부터 n까지의 총 합이다.

변수가 하나만 있을 때는 while문보다 for문을 사용하는 것이 더 좋다.

 

for문을 반복하는 과정에서는 특정 조건에서 반복문을 건너뛰는 continue를 지원한다.

하지만 예를 들어 1에서 100까지 중 50만을 건너뛰는 코드를 짠다면, continue를 사용하는 것보단 1에서 49까지와 51에서 100까지 동작하는 코드를 만드는게 더 효율적이다. 왜냐하면 이런 건너뛰는 판단을 하는 것은 비용이 많이 들기 때문이다.

 

* 가우스의 덧셈

n = int(input('1부터 n까지의 정수의 합: '))
sum = n * (n + 1) // 2
print(sum)

참고로 1부터 n까지 정수의 합은 수학식으로도 구할 수 있다.

 

언더스코어: _

파이썬에서는 언더스코어의 의미가 다양하다. 대표적으로 for문에서 사용할 수 있는데,

for _ in range(10):
    print('Hello')

위와 같은 경우에서 range() 함수가 for문을 순환하여 반환하는 인덱스를 사용할 필요가 없기 때문에 무시하고 싶은 값을 나타내는 _(언더스코어)를 사용하였다.

 

PEP 8

파이썬을 작성할 때 참고할 수 있는 파이썬의 스타일 가이드 PEP 8가 있다.

개발자가 마다 코드를 작성하는 방식이 다르다면 일하는데 혼동을 줄 수 있기 때문에 이 문서를 통해 일관된 규칙을 가이드로 제공한다.

예를 들어 함수명이나 변수명스네이크(snake_case) 형식으로 사용하고, 클래스명카멜 케이스(camelCase) 형식으로 사용할 것을 권장한다. 또한 들여쓰기를 할 때 공백을 4칸 사용하도록 권장하는 내용도 있다.

 

파이썬에서 사용되는 간단한 문법과 알고리즘들을 정리해보았다.

이를 통하여 우리는 다양하고 다채로운 코드들을 작성할 수 있을 것이며, 파이썬만의 알고리즘 안에서 여러 규칙들을 배울 수 있을 것이다.

 

 

[참고]

Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편

'CS > 알고리즘' 카테고리의 다른 글

1. 탐색 알고리즘(Search algorithm)  (0) 2022.04.17

블로그의 정보

Hi Rev

Rev_

활동하기