알고리즘의 5가지 조건

입력 · 출력 · 명확성 · 유한성 · 유효성을 파이썬 코드로 이해하기

알고리즘이란?

알고리즘은 어떤 문제를 해결하기 위해 정해진 순서대로 실행하는 명확한 절차입니다. 좋은 알고리즘은 단순히 코드가 실행되는 것뿐만 아니라, 반드시 일정한 조건을 만족해야 합니다.

1. 입력문제를 해결하기 위한 자료
2. 출력문제 해결 결과
3. 명확성단계가 분명함
4. 유한성반드시 종료됨
5. 유효성실행 가능한 연산
조건 1

입력 Input

의미: 알고리즘은 문제 해결에 필요한 값을 0개 이상 입력받을 수 있어야 합니다.

입력은 사용자가 직접 넣을 수도 있고, 이미 정해진 데이터일 수도 있습니다.

좋은 예 : 두 수를 입력받아 합 구하기

a = int(input("첫 번째 숫자 입력: "))
b = int(input("두 번째 숫자 입력: "))

result = a + b
print("두 수의 합:", result)

이 코드는 사용자가 입력한 두 수를 받아서 계산하므로 입력 조건을 만족합니다.

코드 설명

조건 2

출력 Output

의미: 알고리즘은 문제를 해결한 뒤 최소 1개 이상의 결과를 출력해야 합니다.

출력이 없다면 계산을 해도 결과를 확인할 수 없습니다.

좋은 예 : 평균 출력하기

score1 = 80
score2 = 90
score3 = 100

average = (score1 + score2 + score3) / 3
print("평균 점수:", average)

print()를 사용하여 평균 점수를 보여 주므로 출력 조건을 만족합니다.

나쁜 예 : 계산만 하고 출력하지 않음

score1 = 80
score2 = 90
score3 = 100

average = (score1 + score2 + score3) / 3

평균을 계산했지만 결과를 출력하지 않기 때문에 사용자가 결과를 확인할 수 없습니다.

조건 3

명확성 Definiteness

의미: 알고리즘의 각 단계는 모호하지 않고 분명하게 정의되어야 합니다.

누가 실행해도 같은 방식으로 이해할 수 있어야 합니다.

좋은 예 : 짝수와 홀수 판별

num = 7

if num % 2 == 0:
    print("짝수입니다.")
else:
    print("홀수입니다.")

num % 2 == 0이라는 조건이 명확하므로 결과가 분명하게 결정됩니다.

나쁜 표현

# num이 적당히 큰 수이면 출력한다.
# num이 괜찮은 수이면 통과시킨다.

“적당히”, “괜찮은” 같은 표현은 기준이 불분명하므로 알고리즘의 명확성을 만족하지 못합니다.

조건 4

유한성 Finiteness

의미: 알고리즘은 반드시 한정된 단계 안에서 종료되어야 합니다.

끝나지 않는 절차는 결과를 얻을 수 없기 때문에 좋은 알고리즘이 아닙니다.

좋은 예 : 5번만 반복하기

for i in range(1, 6):
    print(i)

range(1, 6)은 1부터 5까지만 반복하므로 반드시 종료됩니다.

나쁜 예 : 무한 반복

while True:
    print("계속 반복됩니다.")

종료 조건이 없으므로 프로그램이 계속 실행됩니다. 따라서 유한성을 만족하지 못합니다.

조건 5

유효성 Effectiveness

의미: 알고리즘의 각 단계는 실제로 수행할 수 있는 기본적이고 실행 가능한 연산이어야 합니다.

컴퓨터가 처리할 수 없는 모호하거나 불가능한 명령은 유효하지 않습니다.

좋은 예 : 나눗셈의 몫과 나머지 구하기

x = 17
y = 5

quotient = x // y
remainder = x % y

print("몫:", quotient)
print("나머지:", remainder)

//%는 파이썬에서 실제로 수행 가능한 연산이므로 유효성을 만족합니다.

나쁜 표현

# 컴퓨터가 알아서 가장 완벽한 답을 상상해서 구한다.
# 순간이동해서 정답을 가져온다.

이런 명령은 컴퓨터가 실제로 실행할 수 없으므로 유효성을 만족하지 못합니다.

종합 예제

5가지 조건을 모두 만족하는 파이썬 알고리즘

다음 코드는 정수 하나를 입력받아 그 수가 소수인지 판별합니다.

n = int(input("정수 입력: "))

if n < 2:
    print("소수가 아닙니다.")
else:
    is_prime = True

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            is_prime = False
            break

    if is_prime:
        print("소수입니다.")
    else:
        print("소수가 아닙니다.")
조건 코드에서 확인되는 부분
입력 input()으로 정수 입력
출력 print()로 결과 출력
명확성 n % i == 0처럼 판단 기준이 분명함
유한성 for 반복 범위가 정해져 있음
유효성 나머지 연산, 비교 연산 등 실제 실행 가능
확인 문제

OX 문제

1. 알고리즘은 반드시 출력이 있어야 한다. ( O / X )

정답: O — 결과가 없으면 문제 해결 여부를 확인할 수 없습니다.

2. 무한 반복되는 프로그램도 항상 좋은 알고리즘이다. ( O / X )

정답: X — 알고리즘은 유한성을 만족해야 하므로 반드시 종료되어야 합니다.

3. “적당히 계산한다”라는 표현은 명확한 알고리즘 단계이다. ( O / X )

정답: X — 기준이 모호하므로 명확성을 만족하지 못합니다.

4. print()는 출력 조건과 관련이 있다. ( O / X )

정답: O — print()는 결과를 화면에 보여 주는 출력 명령입니다.

5. 컴퓨터가 실제로 수행할 수 없는 명령은 유효성을 만족하지 못한다. ( O / X )

정답: O — 알고리즘의 각 단계는 실행 가능해야 합니다.