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

C++로 N개의 세그먼트를 사용해 7세그먼트 디스플레이에 표시할 수 있는 최대 숫자 구하기

이 문제의 목표는 N개의 세그먼트를 사용하여 하나 또는 여러 개의 7세그먼트 디스플레이에 표시할 수 있는 가장 큰 숫자를 찾는 것입니다.

예시를 통해 문제를 더 자세히 이해해 보겠습니다.

입력 − N = 5

출력 − 71

설명 − 5개의 세그먼트로 만들 수 있는 가장 큰 숫자는 7세그먼트 디스플레이에 다음과 같이 표시됩니다.

C++로 N개의 세그먼트를 사용해 7세그먼트 디스플레이에 표시할 수 있는 최대 숫자 구하기

입력 − N = 6

출력 − 111

C++로 N개의 세그먼트를 사용해 7세그먼트 디스플레이에 표시할 수 있는 최대 숫자 구하기

접근 방법

이 문제는 세 가지 경우로 나누어 생각할 수 있습니다.

  • 경우 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