의사코드(pseudocode)

김수민·2023년 3월 31일
0

백엔드 부트캠프

목록 보기
34/52

의사코드(peudocode) 작성법

의사코드: 프로그래밍 언어로 코드를 작성하기 전에 우리가 쓰는 일상 언어로 프로그램이 작동하는 논리를 먼저 작성하는 것

의사코드의 장점

  1. 시간 단축

처음부터 코드를 작성하면 수도 코드를 작성하는 것보다 시간이 단축되는 느낌이 들지만, 문제가 복잡해지거나 코드 양이 길어진다면 시간이 지나면서 구체적이고 세세한 로직은 기억나지 않음. 결국 작성하는 시간보다 헤매는 시간이 길어질 가능성이 큼. 본인이 생각한 코드를 수도 코드로 남겨놓는다면 지표가 되어 헤매는 시간이 줄어들음.

  1. 디버깅에 용이

코드 작성이 완료되고 테스트를 했을 때, 오류가 발생하면 디버깅을 시작함. 어느 부분에서 오류가 났는지 확일할 때 개발 언어로만 쓰인 코드보다는 모국어로 쓰인 해당 의사코드를 확인하면 다른 것을 제외한 로직에 신경쓸 수 있기 때문에 원인 파악이 쉬워짐

  1. 프로그래밍 언어를 모르는 사람과 소통할 수 있음

프로그래밍 언어에 익숙하지 않은 사람도 나의 수도 코드를 보며 로직을 이해하는데 도움이 될 수 있음. 우리가 쓰는 일상 언어로 쓰여있기 때문에 현업에서 비개발자와도 소통하기에 용이함

의사코드를 구체적으로 써야하는 이유

예. 일상생활에서 사람이 쉽게 접할 수 있는 마스크 쓰는 법

사람에게: 마스크로 코와 입을 덮고 턱 아래, 얼굴 측면에 밀착시켜서 착용하라

컴퓨터에게

1. 마스크를 꺼낸다.
2. 마스크 날개를 펼치고 날개 끝을 잡아 오므린다.
3. 고정심 부분을 위로 잡고 턱에서 시작하여 코와 입을 완전히 가린다.
4. 만약 귀걸이 마스크라면 왼쪽 귀와 오른쪽 귀에 걸어준다.
   만약 귀걸이 마스크가 아니라면 마스크를 머리 뒤쪽으로 걸어준다.
5. 고정심을 코에 밀착되도록 누른다.
6. 양 손으로 마스크 전체를 누르며 공기 누설이 있는지 체크한다.
7. 만약 공기 누설이 있다면, 5번으로 돌아간다.
8. 공기 누설이 없다면 마스크 착용 완료.

빈틈없이 의사코드를 작성하고 코드를 작성해야 문제없이 작동될 수 있음

의사코드를 쓰는 양식

  • 다른 사람도 이해할 수 있는 자연어(영어나 한국어처럼 일상에서 사용되는 언어)만 사용
  • 자연어와 프로그램 언어의 조합을 사용함

자연어와 프로그램 언어 조합의 의사코드

public void wearMask() {

// 마스크를 꺼낸다.

// 마스크 날개를 펼치고 날개 끝을 잡아 오므린다.

// 고정심 부분을 위로 잡고 턱에서 시작하여 코와 입을 완전히 가린다.

// if (귀걸이 마스크라면) 왼쪽귀와 오른쪽귀에 걸어준다.

// else 마스크를 머리 뒷쪽으로 걸어준다.

// while(공기누설이 있다면)

  // 고정심을 코에 밀착되도록 누른다.

  // 양 손으로 마스크 전체를 누른다.

  //if(공기누설이 없다면) return;

}

예제를 통한 이해

실습 예제 1

문제 | 수를 요소로 갖는 배열을 입력받아, 각 요소들이 그 이전의 요소들의 합보다 큰지 확인.

수도코드

// 배열의 각 요소들이 그 이전의 요소들의 합보다 큰지 여부를 확인하는 함수
public Boolean superIncreasing(int[] arr) {

// 변수 sum을 선언하고, 0번째 요소를 할당한다.

// 1번째 요소부터, 가장 마지막 요소까지 순회하는 반복문을 만든다.

	// 만약 arr[i]가 sum보다 작거나 같으면 false를 반환한다.

	// 그렇지 않으면, 기존의 sum에 arr[i]를 더한다.

//반복문이 끝나면 true를 반환한다.

}

수도코드를 기반으로 작성한 코드

// 배열의 각 요소들이 그 이전의 요소들의 합보다 큰지 여부를 확인하는 함수
public Boolean superIncreasing(int[] arr) {

  // 변수 sum을 선언하고, 0번째 요소를 할당한다.
  int sum = arr[0];

  // 1번째 요소부터, 가장 마지막 요소까지 순회하는 반복문을 만든다.
  for (int i = 1; i < arr.length; i++) {

    // 만약 arr[i]가 sum보다 작거나 같으면
    if (arr[i] <= sum) {
      // false를 반환한다.
      return false;
    } else {
      // 그렇지 않으면, 기존의 sum에 arr[i]를 더한다.
      sum = sum + arr[i];
    }
    //반복문이 끝나면 true를 반환한다.
  }
  return true;
}

실습 예제 2

문제 | 문자열을 입력받아 연속된 한자리 홀수 숫자 사이에 '-'를 추가한 문자열을 리턴하는 함수 작성

수도코드

// 문자열을 입력받아 연속된 한자리 홀수 숫자 사이에 '-'를 추가한 문자열을 리턴하는 함수

public String insertDash(String str) {
	//입력된 String을 char을 요소로 가지는 배열로 변환합니다.

	//for(1번째 요소부터, 가장 마지막 요소까지 순회)

		//if(str[i-1], str[i] 둘다 홀수라면)

			//result에 str[i]와 '-' 를 추가한다.

		// else() result에 str[i]만 추가한다.

		//예외 케이스로 문자열의 마지막을 추가한다.

	//반복문이 끝나면 result를 반환한다.

}

수도코드를 기반으로 작성한 코드

// 문자열을 입력받아 연속된 한자리 홀수 숫자 사이에 '-'를 추가한 문자열을 리턴하는 함수

public String insertDash(String str) {
	//입력된 String을 char을 요소로 가지는 배열로 변환합니다.
  char[] arrCh = str.toCharArray();
	//결과를 저장할 result 변수를 선언, 빈 값을 할당합니다.
  String result = "";

  for(int i = 1; i < arrCh.length; i++) {
		//앞선 문자열과 이후 문자열을 비교할 변수를 선언후, 해당 값을 int로 변환합니다.
    int preChar = Character.getNumericValue(arrCh[i - 1]);
    int curChar = Character.getNumericValue(arrCh[i]);
		//두 문자열이 모두 홀수라면
    if(preChar % 2 == 1 && curChar % 2 == 1) {
			//결과에 이전값과 "-"를 함께 저장합니다.
      result = result + preChar + "-";
    } else {
			//하나라도 홀수가 아니라면, 결과에 이전값만 추가로 저장합니다.
      result = result + preChar;
    }
		//인덱스가 마지막일 경우, 맨 마지막 char을 추가합니다(예외 케이스)
    if(i == arrCh.length - 1) result = result + curChar;
  }
  return result;
  }

0개의 댓글