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

C/C++에서 반복문과 조건문 없이 1부터 1000까지 출력하는 방법

이 글에서는 반복문(loop)과 조건문(conditional statement)을 전혀 사용하지 않고 1부터 1000까지 출력하는 방법을 알아봅니다.

반복문을 쓸 수 없다면 일반적으로 재귀(recursion)를 떠올리게 되지만, 이 문제에서는 조건문 역시 사용할 수 없다는 추가 제약이 있습니다. 조건문이 없으면 재귀 함수의 기저 사례(base case)를 만들 수 없으므로, 재귀 방식도 사실상 사용하기 어렵습니다.

해결 아이디어: 정적 멤버와 생성자 활용

여기서는 정적(static) 멤버 변수생성자를 활용해 이 문제를 해결합니다. 핵심 원리는 다음과 같습니다.

먼저 정적 멤버 변수를 1로 초기화합니다. 이후 클래스의 생성자 안에서 현재 정적 멤버의 값을 출력하고, 출력 직후 값을 1씩 증가시킵니다. 그다음 해당 클래스 타입의 객체 1000개를 담는 배열을 선언하면, 배열의 각 요소마다 객체가 하나씩 생성되므로 생성자가 총 1000번 호출됩니다. 결과적으로 1부터 1000까지 순서대로 화면에 출력됩니다.

예제 코드

#include<iostream>
using namespace std;
class PrintN {
   public:
      static int value;
      PrintN() {
         cout<< value++ <<", ";
      }
};
int PrintN::value = 1; // 1로 초기화
main() {
   int N = 1000;
   PrintN obj[N]; // 크기 1000짜리 배열을 만들어 객체 1000개 생성
}

실행 결과

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, .... 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,

동작 원리 정리

  • 정적 멤버 변수(value): 모든 객체가 값을 공유하며, 프로그램 시작 시 1로 초기화됩니다.
  • 생성자(PrintN()): 객체가 생성될 때마다 자동으로 호출되어 현재 값을 출력하고 value를 1 증가시킵니다.
  • 객체 배열(obj[N]): 배열 선언만으로 객체 1000개가 연속적으로 생성되며, 이 과정에서 생성자가 1000번 실행됩니다.

이처럼 반복문과 조건문 없이도 C++의 객체 생성 메커니즘과 정적 멤버의 특성을 활용하면 특정 범위의 숫자를 손쉽게 출력할 수 있습니다.