logo

의사 코드란? 📂보조정리

의사 코드란?

용어 1

자연어를 사용하여 플랫폼에 무관하고 심층적인 코드에 대해 설명한 것을 의사 코드pseudo code라 한다.

설명

의사 코드는 말 그대로 코드인 것 같지만 실제로는 코드가 아닌 표현으로써, 특정한 프로그램 언어에 구애받지 않고 알고리즘을 설명하기 위해 사용된다. 수도 코드는 자연어는 물론 수식을 사용해도 좋으며, 그 정의가 명확하고 전달력에 문제만 없다면 특정 언어의 문법을 차용해도 무방하다.

그 알고리즘을 어떻게 구현하는지는 프로그래머의 스타일이나 여러가지 제약 조건에 따라 천차만별로 달라질 수 있지만, 의사 코드는 가장 근본적으로 작동되는 알고리즘의 원형으로써 존재해야 한다.

아이러니한 것은 의사 코드가 ‘알고리즘의 원형’이라는 설명이 무색하게도 의사 코드 작성법 자체에도 여러가지 스타일이 있을 수 있다는 것이다. 예로써 선택 정렬을 설명하는 두가지 스타일의 의사 코드를 보려고 한다. 어떤 스타일로 구현하든 상관은 없지만, 근본적으로는 최소값을 반복적으로 구함으로써 정렬을 수행한다.

알고리즘: 선택정렬 1
In길이가 nn 인 배열 A=[a1,,an]A = \left[ a_{1} , \cdots , a_{n} \right]
1.for i=1,,ni = 1, \cdots, n do
2.   jarg min[ai+1,,an]j \gets \argmin \left[ a_{i+1} , \cdots , a_{n} \right]
3.   ai,ajaj,aia_{i} , a_{j} \gets a_{j} , a_{i}# 자리 교체
4.end for
Out오름차순으로 정렬된 배열 AA

포트란이나 C, 매트랩처럼 절차지향성이 강한 스타일이다. 반복문이나 조건문 등의 블럭을 end와 같은 명시적인 키워드로 닫아주는 경우가 많으며, 배열 단위부터 정직하게 접근해서 읽기가 편하다.

알고리즘: 선택정렬 2
In길이가 nn 인 배열 A=[a1,,an]A = \left[ a_{1} , \cdots , a_{n} \right]
1.BB \gets \emptyset# 빈 배열 초기화
2.while AA \ne \emptyset
3.   apop(A,minA)a \gets \operatorname{pop} \left( A, \min A \right)
4.   push(B,a)\operatorname{push} \left( B , a \right)
Out오름차순으로 정렬된 배열 BB

파이썬처럼 객체지향성이 강한 스타일이다. 문법도 파이썬을 본따서 인덴트indent로 블럭을 구분하는 경우가 많으며, 해당 논문이나 교재를 읽고 있다면 상식적으로 알법한 자료구조가 갑자기 등장할 수 있다. 아무래도 인덱스를 하나하나 따져가면서 읽는 것보다 개념적으로 이해하기 쉽다는 장점이 있다.


  1. A. Alhefdhi, H. K. Dam, H. Hata and A. Ghose, “Generating Pseudo-Code from Source Code Using Deep Learning,” 2018 25th Australasian Software Engineering Conference (ASWEC), Adelaide, SA, Australia, 2018, pp. 21-25, https://doi.org/10.1109/ASWEC.2018.00011 ↩︎