Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 조건문 없이 '짝수' 또는 '홀수'를 판별해 출력하는 프로그램

개요

이 글에서는 비교 연산자(<, <=, !=, >, >=, ==)나 if문 같은 조건문을 전혀 사용하지 않고, 숫자가 홀수인지 짝수인지 판별하여 출력하는 방법을 알아봅니다.

평소라면 조건문을 활용하면 아주 간단하게 홀수·짝수를 구분할 수 있습니다. 숫자를 2로 나눈 나머지가 0이면 짝수, 아니면 홀수라고 판단하거나, 숫자와 1을 비트 AND 연산했을 때 결과가 0이면 짝수, 그렇지 않으면 홀수로 처리하면 됩니다.

하지만 여기서는 어떠한 형태의 조건문도 사용할 수 없다는 것이 핵심입니다. 이번 글에서는 두 가지 서로 다른 방법으로 이 문제를 해결해 보겠습니다.

방법 1: 문자열 배열 활용

첫 번째 방법은 문자열 배열을 이용하는 것입니다. 인덱스 0 위치에는 "Even(짝수)", 인덱스 1 위치에는 "Odd(홀수)"를 저장해 둡니다. 그런 다음 숫자를 2로 나눈 나머지(n % 2)를 배열의 인덱스로 넘겨주면, 별도의 조건 판단 없이 결과를 바로 얻을 수 있습니다.

예제 코드

#include <iostream>
using namespace std;
main() {
   int n;
   string arr[2] = {"Even", "Odd"};
   cout << "Enter a number: "; // 사용자로부터 숫자 입력 받기
   cin >> n;
   cout << "The number is: " << arr[n%2]; // 나머지를 인덱스로 사용해 문자열 선택
}

실행 결과 1

Enter a number: 40
The number is: Even

실행 결과 2

Enter a number: 89
The number is: Odd

방법 2: 논리 연산자와 비트 연산자 활용

두 번째 방법은 약간의 트릭을 응용한 기법입니다. 논리 연산자와 비트 연산자를 함께 사용하는데, 먼저 숫자와 1을 비트 AND 연산합니다. 그 후 논리 AND를 이용해 "odd" 또는 "even"을 출력하도록 구성합니다. 비트 AND 연산의 결과가 1일 때만 논리 AND 연산이 참이 되어 "odd"가 출력되고, 그렇지 않은 경우 OR(||) 뒤쪽의 "even"이 출력됩니다.

여기서 핵심은 단축 평가(short-circuit evaluation) 원리입니다. 논리 AND는 왼쪽 피연산자가 거짓이면 오른쪽을 평가하지 않고, 논리 OR는 왼쪽이 참이면 오른쪽을 평가하지 않기 때문에, 이 성질을 이용하면 조건문 없이도 분기 효과를 낼 수 있습니다.

예제 코드

#include <iostream>
using namespace std;
main() {
   int n;
   cout << "Enter a number: "; // 사용자로부터 숫자 입력 받기
   cin >> n;
   (n & 1 && cout << "odd") || cout << "even"; // 최하위 비트(LSb)가 1이면 n & 1은 1, 즉 홀수
}

실행 결과 1

Enter a number: 40
even

실행 결과 2

Enter a number: 89
odd

마무리

두 방법 모두 if문이나 삼항 연산자 같은 조건 분기를 일절 사용하지 않고도 홀수·짝수를 정확히 판별할 수 있다는 점이 흥미롭습니다. 특히 방법 1처럼 나머지를 배열 인덱스로 활용하는 기법은 실무에서도 유용하게 응용할 수 있으며, 방법 2의 단축 평가를 이용한 기술은 코딩 면접에서 자주 등장하는 고전적인 문제이므로 동작 원리를 잘 이해해 두면 좋습니다.