1.2 알고리즘과 코딩
컴퓨터 분야를 공부하다 보면 알고리즘이라는 말을 자주 듣게 됩니다. 그런데 알고리즘이 도대체 어디에 쓰이고 있을까요? 사실 눈에 잘 띄지 않아 멀게만 느껴집니다. 하지만 우리는 알고리즘의 혜택을 많이 보고 있는데 대표적인 알고리즘이 압축 알고리즘입니다.
1.2.1 압축 알고리즘
휴대폰이나 카메라로 사진을 찍으면 JPG라는 확장자로 저장되는데 이 JPG(JPEG)가 압축 알고리즘을 구현한 포맷입니다. 사진을 그대로 저장하면 용량이 너무 커서 저장 공간이 금방 차버리겠지만 압축을 해서 저장하면 많은 사진을 보관할 수 있습니다. 휴대폰이나 카메라를 가진 사람들은 모두가 이용하는 알고리즘이죠.
압축 알고리즘을 좀 더 간단하게 알아보겠습니다. 예를 들어 'aaaaabbbccccccddddddddd'라는 문자열이 있는데 문자열을 잘 보면 일정한 패턴이 있습니다. 같은 문자가 여러 번 반복되죠.
이걸 다음과 같이 문자 뒤에 반복되는 횟수를 적어주면 원래 데이터보다 길이가 짧아져서 저장 공간을 절약할 수 있습니다. 즉, 압축입니다.
23글자가 8글자로 줄었습니다. 'aaaaabbbccccccddddddddd'를 압축할 때는 반복되는 문자의 횟수를 적어주고, 'a5b3c6d9'의 압축을 해제할 때는 숫자만큼 문자를 반복해주자고 약속하면 됩니다. 생각보다 간단하죠? 컴퓨터에서 쓰이는 압축 알고리즘도 이러한 방법을 사용하고 있습니다(이 방식은 Run-Length Encodig, RLE라고 하며 PCX 그림 파일 포맷에 쓰였습니다. 요즘은 좀 더 다양한 상황에 대응하고 압축 효율을 높이기 위해 훨씬 복잡한 알고리즘을 사용합니다).
1.2.2 문제의 패턴 발견과 해결 절차
이처럼 문제에서 일정한 패턴을 발견하고, 패턴을 토대로 문제를 해결하는 절차가 알고리즘입니다. 그리고 이 알고리즘을 코드로 표현하는 행동을 코딩이라 합니다(알고리즘을 컴퓨터의 명령으로 작성하는 것을 프로그래밍이라고 하며 코딩과 같은 개념입니다).
어떨 때는 프로그래밍이라고 했다가 어떨 때는 코딩이라고 하고 좀 헷갈리죠? 사실 둘 다 같은 작업을 지칭합니다. 프로그래밍은 컴퓨터 명령어로 표현한다는 뜻이라 컴퓨터 쪽에 가깝고, 코딩은 파이썬 등의 프로그래밍 언어로 코드를 작성한다는 뜻이라 언어 쪽에 가까운 표현입니다.