YunDev

구조적 프로그래밍, 드모르간 본문

자료구조와 알고리즘

구조적 프로그래밍, 드모르간

S준 2025. 1. 11. 02:30

하나의 입구, 하나의 출구를 가진 구성 요소만을 계층적으로 배치하여 프로그램을 구성하는 방법을 구조적 프로그래밍이라고 합니다. 구조적 프로그래밍은 순차, 선택, 반복이라는 3종류의 제어 흐름을 사용합니다.

 

알아보고자 하는 프로그램은 두 자리의 숫자만 입력받을 수 있게 제한하는 코드입니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        while(num < 10 || num > 99) {
           System.out.println("Enter a number between 1 and 99");
           num = sc.nextInt();
       }
        System.out.println(num);
    }
}

제어 부문의 조건식으로 인해 두 자리의 숫자가 입력이 되지 않은 경우 반복적으로 입력받게 됩니다. 여기서 or 연산자의 식 전체를 판단하지 않아도 하나라도 true가 나온다면 결과는 무조건 true, and 연산자의 식 중 하나라도 false이면 결과가 무조건 false로 나오게 되고, 나머지 피연산자의 평가를 수행하지 않는데, 이를 단축 평가라고 합니다.

코드를 조금 수정하여 제어식을 논리 부정 연산자 !을 사용하면 !(num >= 10 && num <= 99) 이러한 식과 같습니다.
'각 조건을 부정(부등호의 경우 <=, >=)하고 논리곱 -> 논리합, 논리합 -> 논리곱으로 바꾸고 전체를 부정하면 원래의 조건과 같다'는 법칙을 드모르간이라고 합니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        while(!(num >= 10 && num <= 99)) {
           System.out.println("Enter a number between 1 and 99");
           num = sc.nextInt();
       }
        System.out.println(num);
    }
}

따라서 위 코드와 아래코드는 같은 결과를 출력하게 됩니다.