이 문제에서는 계산기에서 흔히 볼 수 있는 세븐 세그먼트(7-Segment) 디스플레이에 표시되는 두 자리 숫자의 시간이 주어집니다. 우리가 해야 할 일은 화면의 선분(비트)을 하나 켜거나 껐을 때 만들어질 수 있는 다른 시간 조합이 총 몇 가지인지 계산하는 것입니다.
세븐 세그먼트 디스플레이란?
세븐 세그먼트 디스플레이는 7개의 선분을 켜고 끄는 조합으로 숫자를 표시하는 특수한 디스플레이 장치입니다. 디지털 시계, 계산기, 전자레인지 등 일상 속 다양한 전자기기에서 널리 사용되고 있습니다.
세븐 세그먼트 디스플레이의 예시는 아래와 같습니다.

문제 이해를 위한 예시
입력 − 7 5
출력 − 20
설명 − 숫자 7은 9, 3, 8, 0, 7의 5가지 숫자로 바꿀 수 있습니다. 숫자 5는 4가지 숫자로 바꿀 수 있습니다. 따라서 총 경우의 수는 5 × 4 = 20가지입니다.
해결 방법
이 문제를 해결하려면 각 숫자가 세그먼트를 하나 켜거나 꺼서 변환될 수 있는 숫자의 개수를 미리 배열에 저장해 두어야 합니다. 그러면 두 자리 시간의 총 경우의 수는 십의 자리 숫자의 경우의 수 × 일의 자리 숫자의 경우의 수로 구할 수 있습니다.
각 숫자별로 변환 가능한 개수는 다음 배열에 저장되어 있습니다.
int num[10] = { 2, 7, 2, 3, 3, 4, 2, 5, 1, 2 };
여기서 num[i]는 숫자 i가 표현될 수 있는 경우의 수를 의미합니다. 예를 들어 num[7] = 5이므로 숫자 7은 5가지 방법으로 표현할 수 있고, num[1] = 7이므로 숫자 1은 7가지 방법으로 표현할 수 있습니다.
구현 예제
위에서 설명한 해결 방법을 구현한 C++ 프로그램입니다.
#include <iostream>
using namespace std;
int num[10] = { 2, 7, 2, 3, 3, 4, 2, 5, 1, 2 };
int AllPossibleTimings(int timing) {
return num[timing / 10] * num[timing % 10];
}
int main() {
int timing = 71;
cout << "All Possible timings from " << timing << " are : " << AllPossibleTimings(timing);
return 0;
}
실행 결과
All Possible timings from 71 are : 35
숫자 71의 경우, 십의 자리 7은 5가지(num[7])로, 일의 자리 1은 7가지(num[1])로 표현할 수 있으므로 총 5 × 7 = 35가지의 타이밍 조합이 가능합니다. 이처럼 각 자릿수의 경우의 수만 미리 저장해 두면 복잡한 연산 없이 곱셈 한 번으로 답을 구할 수 있어 매우 효율적입니다.