이 문제의 목표는 N개의 세그먼트를 사용하여 하나 또는 여러 개의 7세그먼트 디스플레이에 표시할 수 있는 가장 큰 숫자를 찾는 것입니다.
예시를 통해 문제를 더 자세히 이해해 보겠습니다.
입력 − N = 5
출력 − 71
설명 − 5개의 세그먼트로 만들 수 있는 가장 큰 숫자는 7세그먼트 디스플레이에 다음과 같이 표시됩니다.

입력 − N = 6
출력 − 111

접근 방법
이 문제는 세 가지 경우로 나누어 생각할 수 있습니다.
경우 1 − N이 0 또는 1인 경우
숫자를 표시하는 데 필요한 최소 세그먼트 수는 2개(숫자 1)이므로, 세그먼트가 0개 또는 1개뿐이라면 어떤 숫자도 표시할 수 없습니다.
경우 2 − N이 홀수인 경우
홀수 개의 세그먼트로 표시할 수 있는 숫자는 2, 3, 5, 7, 8입니다. 이 중 7은 단 3개의 세그먼트만 사용하므로 가장 적은 세그먼트로 표시할 수 있습니다. 따라서 이 경우 최상위 자릿수는 7이 됩니다.
경우 3 − N이 짝수인 경우
짝수 개의 세그먼트로 표시할 수 있는 숫자는 0, 1, 4, 6, 9입니다. 이 중 1은 단 2개의 세그먼트만 사용하므로 가장 적은 세그먼트로 표시할 수 있습니다. 따라서 이 경우 최상위 자릿수는 1이 됩니다.
알고리즘 동작 원리
MaxNumber() 함수에서 먼저 기저 조건(base case)을 확인합니다.
if (N == 1 || N == 0)
다음으로 if 문을 사용해 N이 짝수인지 검사합니다. 짝수라면 이 경우의 최상위 자릿수인 "1"을 출력하고, 2개의 세그먼트가 사용되었으므로 MaxNumber(N - 2)를 재귀 호출합니다.
마찬가지로 if 문으로 N이 홀수인지 검사합니다. 홀수라면 이 경우의 최상위 자릿수인 "7"을 출력하고, 3개의 세그먼트가 사용되었으므로 MaxNumber(N - 3)을 재귀 호출합니다.
예제 코드
#include <iostream>
using namespace std;
void MaxNumber(int N){
//기저 조건 확인
if (N == 1 || N == 0){
return;
}
//N이 짝수인 경우
if (N % 2 == 0){
cout << "1";
MaxNumber(N - 2);
}
//N이 홀수인 경우
else if (N % 2 == 1){
cout << "7";
MaxNumber(N - 3);
}
}
//메인 함수
int main(){
int N;
N = 5;
MaxNumber(N);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
71