Pseudo-code 작성법

Pseudo-code(의사 코드) 란

가짜의 - 코드 로써, 알고리즘이 수행될 내용을 인간의 언어로 간략히 설명해 놓은것을 말한다.

1
2
3
4
5
6
7
의사코드(슈도코드, pseudocode)는 프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위한 언어이다.  
특정 프로그래밍 언어의 문법에 따라 쓰인 것이 아니라,  
일반적인 언어로 코드를 흉내 내어 알고리즘을 써놓은 코드를 말한다.   

의사(疑似)코드는 말 그대로 흉내만 내는 코드이기 때문에,  
실제적인 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없으며,   
특정 언어로 프로그램을 작성하기 전에 알고리즘의 모델을 대략적으로 모델링하는 데에 쓰인다  

출처 : 위키피디아


  • 나는 알고리즘 문제를 해결할때, 항상 의사 코드를 먼저 작성하고 구현에 들어간다.
  • 의사 코드를 작성 하면서 설계를 90퍼센트 이상 마치고 구현에 들어간다.
  • 구현할때는 진짜 노트에 써놓은 의사코드를, 실제 코드로만 변경시키는 작업을 한다.
    • 의사 코드를 작성하면서 처음에 생각했던 논리에서 오류를 찾는 경우가 아주 많았다.
      • 이 때문인지 한번에 AC를 받는 경우가 많다.
    • 머릿속의 생각을 바로 코드로 옮기는것보다, 구현속도가 훨씬 빨랐다.
      • 이건 개인차가 있을것이다.
      • 나의 경우에는, 기능별로 함수를 하나씩 다 구현하는 스타일이라 그런것 같다.

하지만 내가 짜는 의사코드는, 나만 알아볼 수 있게 쓰고 있었다.

  • 의사코드는, 딱 이렇다할 정해진 양식이 없다.
  • 그리고 알고리즘 문제를 혼자 풀때는, 나만 알아보아도 상관없다.
  • 하지만 남들도 단번에 보고 쉽게 이해할 수 있는 의사코드를 작성하는 능력을 갖춘다면, 경쟁력이 되지않을까?
  • 라는 생각이 들었다.

이를 위해서, 좀 더 정형화된 의사코드를 짜는 연습을 해보려고한다.

나만의 규칙을 몇가지 세웠다.

추상적인 표현, 추측이 필요한 표현은 절대 적지 않는다.

1
2
3
4
IF(a % 2 == 0) // 이렇게 작성 하지 않는다

IF(a  2  나누어 떨어진다면)
IF(a 짝수 라면)

기능별로 나누어서 작성한다.

1
2
3
FUNC_SUM(매개변수) : [함수 내용]

CALL FUNC_SUM(매개변수)

함수의 경우 매개변수의 이름을 명확히 한다.

1
2
3
4
5
DFS(계산된 , 다음 노드){
    if (다음 노드가 10 이면) return 계산된 ;
    else return DFS(계산된  + 다음 노드의 , 다음 노드 + 1);
}

일반적으로 쓰이는 프로그래밍 문법에 맞춰 작성한다

1
2
3
4
5
6
7
8
FOR(a to b, a 2씩증가)

WHILE(큐가 빌때까지) DO(count 1 증가시킨다)

IF(A 10 이상이라면) THEN(함수를 종료시킨다)

IF (A 홀수라면) PRINT(odd)
ELSE PRINT(even)

너무 세세히 작성하지 않는다

1
2
3
4
5
6
7
8
지도 정보를 입력 받는 경우.

// 행을 입력받는다
// for(row to n, row는 1씩 증가)
    //열을 입력받는다
    // for(col to n, col는 1씩 증가)

이런식으로 일일히 적지 않는다.
  • 수도 코드 라인수가 실제 코드의 라인수에 육박함.
  • 오히려 더 복잡해 보이는 역효과를 낳음.
  • 반복문의 경우 범위가 민감하거나 하여, 세세해야 하는 파트만 작성한다.
1
2
3
4
5
6
7
지도 정보를 입력 받는 경우.

FUNC 지도를 입력 받는 함수(){

    // 행 열 순으로 지도 정보를 입력받는다.
    // 지도 input이 `char` 이므로 정수로 바꾸어 준다.
}
  • 1번 규칙 추상적인 표현을 절대 적지 않는다. 의 경우에 위반 되지만
  • 누군가에게 설명해야 하는 경우가 아니라면, 너무 나이브한 부분은 개론 정도만 작성한다.

이 글은 계속 수정하며 보완할 예정입니다.

  • 최초 작성일 2020-03-14
  • 최종 수정일 2020-07-11