● 스타트 파이썬 : 알고리즘과 파이썬
주어진 문제를 해결하기 위해 알고리즘에 대해 공부해보도록 하겠습니다.
1. 알고리즘과 코딩
알고리즘은 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것입니다. 알고리즘은 문제 해결에 필요한 사람의 논리적 사고, 컴퓨터 프로그래밍 방법, 수학적 문제 풀이 과정 등을 모두 포함합니다.
> 1.1 알고리즘
- 주어진 문제 : 덧셈의 교환법칙, 'a+b는 b+a와 같다'를 증명하시오.
- 알고리즘의 요약 : 컴퓨터로 a + b의 계산 결과와 b + a의 결과를 비교하여 두 값이 같으면 덧셈에 대한 교환법칙이 성립함을 알 수 있다.
- 알고리즘 상세 설명
(1) 키보드에서 a와 b를 입력 받습니다.
(2) a + b 를 계산하여 c에 저장합니다.
(3) b + a 를 계산하여 d에 저장합니다.
(4) c와 d를 비교하여 값이 같으면 덧셈의 교환법칙이 성립합니다.
- 흐름도(Flow Chart)
> 1.2 파이썬 코딩하기
# 예제 1.2
a = int(input('첫 번째 수를 입력하세요 : '))
b = int(input('두 번째 수를 입력하세요 : '))
c = a + b
d = b + a
if c == d :
print('%d + %d의 결과 : %d'%(a,b,c))
print('%d + %d의 결과 : %d'%(b,a,d))
print('덧셈의 교환법칙이 성립합니다.')
else :
print('덧셈의 교환법칙이 성립하지 않습니다.')
2. 바코드 암호화/복호화 하기
암호화(Encryption)는 정보 보안을 위해 다른 사람이 알아볼 수 없도록 정보를 가공하여 숨기는 것을 말합니다. 거꾸로 복호화(Decryption)는 암호화된 정보를 원래의 정보로 해독하는 작업을 의미합니다.
숫자를 바코드로 암호화하고 복호화하는 과정을 살펴보면 위 그림과 같습니다.
숫자 | 바코드 | 숫자 | 바코드 |
0 | | | : : : | 5 | : | : | : |
1 | : : : | | | 6 | : | | : : |
2 | : : | : | | 7 | | : : : | |
3 | : : | | : | 8 | | : : | : |
4 | : | : : | | 9 | | : | : : |
> 2.1 바코드 암호화 하기
- 주어진 문제 : 위의 암호화 표의 키를 참고하여 키보드로 입력받은 5 ~ 10 자리의 숫자를 바코드 기호로 암호화하는 프로그램을 작성하세요
- 알고리즘 요약 : 입력된 숫자가 5 ~ 10 자인지를 체크한 다음 표를 참고하여 각 숫자에 대응되는 바코드 기호를 구하여 하나의 문자열로 만들어 출력합니다.
- 알고리즘 상세 설명
(1) 키보드로 숫자를 입력 받습니다.
(2) 입력된 숫자의 개수를 구하여 5 ~ 10개 이면 암호화를 시작하고, 아니면 다시 숫자 입력를 다시 받습니다.
(3) 숫자를 하나씩 읽어 들여 각 숫자에 해당되는 바코드 기호를 구한 다음 합쳐서 하나의 문자열로 만듭니다.
(4) 암호화된 바코드를 출력합니다.
- 코딩하기
# 예제 2.1
def barEncryp(n) :
if n == '0' :
code = '||:::'
elif n == '1' :
code = ':::||'
elif n == '2' :
code = '::|:|'
elif n == '3' :
code = '::||:'
elif n == '4' :
code = ':|::|'
elif n == '5' :
code = ':|:|:'
elif n == '6' :
code = ':||::'
elif n == '7' :
code = '|:::|'
elif n == '8' :
code = '|::|:'
elif n == '9' :
code = '|:|::'
else :
code = '오류'
return code
loop = True
while loop :
in_string = input('5 ~ 10자리의 숫자를 입력하세요 : ')
if len(in_string) >= 5 and len(in_string) <= 10 :
break
string = ''
for i in list(in_string) :
string = string + barEncryp(i)
print(string)
하나의 숫자를 그에 해당하는 기호로 변환하는 함수 barEncryp()를 정의합니다. while문에서는 입력받은 값이 5 ~ 10 자리인지 확인하도록 len() 함수를 사용하도록 코드를 작성해줍니다. 그다음 for문에 들어가기전 string에 아무 값도 들어있지 않는 str형 변수를 만들어줍니다.
for문에서 list(in_string)은 변수 in_string을 리스트로 변환한 값을 가집니다. 따라서 for 루프에서 i는 입력받은 각각의 숫자의 값을 가지게 됩니다. 그다음 처음에 정의한 barEncryp() 함수를 이용하여 암호화해줍니다.
> 2.2 바코드 복호화 하기
- 주어진 문제 : 암호화된 바코드를 입력 받아 원래의 숫자를 복호화하는 프로그램을 작성합니다.
- 알고리즘 요약 : 암호화된 바코드를 반복문을 이용하여 읽어 들여 표를 참고하여 숫자를 복호화한 다음 그 결과를 화면에 출력합니다.
- 알고리즘 상세설명
(1) 키보드로 바코드를 입력 받습니다,
(2) 반복문으로 바코드를 한 세트(5개의 바코드 기호)씩 읽어 들인 다음
그에 대응되는 숫자로 복호화하여 하나의 문자열로 합칩니다.
(3) 복호화된 숫자를 출력합니다.
- 코딩하기
# 예제 2.2
def barDdecrypt(code) :
if code == '||:::':
num = '0'
elif code == ':::||':
num = '1'
elif code == '::|:|':
num = '2'
elif code == '::||:':
num = '3'
elif code == ':|::|':
num = '4'
elif code == ':|:|:':
num = '5'
elif code == ':||::' :
num = '6'
elif code == '|:::|' :
num = '7'
elif code == '|::|:' :
num = '8'
elif code == '|:|::':
num = '9'
else :
num = '오류'
return num
in_string = input('바코드를 입력하세요 : ')
num = ''
for i in range(0,len(in_string),5) :
num = num + barDdecrypt(in_string[i:i+5])
print(num)
하나의 바코드를 숫자로 변환하는 함수 barDdecrypt()를 정의합니다. 바코드를 입력 받아 변수 in_string에 저장합니다.
드디어 파이썬 공부가 전부 끝이났습니다 ! 그동안 열심히 봐주셔서 감사합니다 :)
'Python > 스타트파이썬' 카테고리의 다른 글
[스타트파이썬] 모듈 (0) | 2019.10.11 |
---|---|
[스타트파이썬] 클래스 (0) | 2019.10.10 |
[스타트파이썬] 함수 (0) | 2019.10.09 |
[스타트파이썬] 튜플과 딕셔너리 (0) | 2019.10.08 |
[스타트파이썬] 리스트 : list, append, remove (0) | 2019.10.08 |