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

C++로 숫자를 하나씩 표시할 때 LED 조명 변경 횟수 계산하기


양의 정수 num이 주어졌을 때, 숫자를 하나씩 차례로 표시하는 과정에서 발생하는 LED 조명의 변경 횟수를 계산하는 것이 이번 문제의 목표입니다. 처음에는 모든 LED가 꺼져 있는 상태라고 가정하며, 문자열 값에 따라 순차적으로 켜지게 됩니다.

이 문제를 해결하려면 먼저 7세그먼트 디스플레이가 무엇이고 어떻게 작동하는지 이해해야 합니다.

7세그먼트 디스플레이란?

7세그먼트 디스플레이는 이미지, 텍스트 또는 십진수 형태로 정보를 표시할 수 있는 출력 장치로, 구조가 더 복잡한 도트 매트릭스 디스플레이의 대안으로 널리 사용됩니다. 디지털 시계, 기본형 계산기, 전자 계량기 등 숫자 정보를 표시하는 다양한 전자 기기에서 활용되며, 발광 다이오드(LED) 7개가 숫자 '8' 모양으로 배열되어 구성됩니다.

C++로 숫자를 하나씩 표시할 때 LED 조명 변경 횟수 계산하기

7세그먼트 디스플레이의 작동 원리

모든 세그먼트에 전원이 공급되면 숫자 8이 표시되고, 'g' 세그먼트의 전원을 차단하면 숫자 0이 표시됩니다. 7세그먼트 디스플레이에서는 서로 다른 핀에 동시에 전압을 인가할 수 있으므로, 세그먼트 조합을 통해 0부터 9까지의 숫자를 자유롭게 표현할 수 있습니다. 다만 X나 Z 같은 알파벳은 표현할 수 없어 일반 문자 표시용으로는 적합하지 않으며, 주로 십진수 표시에 사용됩니다. 반면 A, B, C, D, E, F는 표현이 가능하기 때문에 16진수 자릿수를 나타내는 용도로도 활용할 수 있습니다.

C++로 숫자를 하나씩 표시할 때 LED 조명 변경 횟수 계산하기

예시

입력 − num = "123"
출력 − count is 5

설명 − 숫자 1을 표시하는 데 필요한 LED는 2개, 숫자 2는 5개, 숫자 3은 5개입니다. 첫 번째 숫자는 모든 LED를 새로 켜야 하고, 이후 숫자는 이전 상태와의 차이만큼만 변경하면 되므로 총 변경 횟수는 2 + 3 + 0 = 5입니다.

입력 − num = "576"
출력 − count is 10

설명 − 숫자 5를 표시하는 데 필요한 LED는 5개, 숫자 7은 3개, 숫자 6은 6개입니다. 따라서 총 변경 횟수는 5 + 2 + 3 = 10입니다.

프로그램의 접근 방식

  • 표시할 숫자를 정의하는 정수 문자열을 입력받습니다.

  • length() 함수를 사용해 문자열의 길이를 계산합니다. 이 함수는 문자열 내 자릿수에 해당하는 정수 값을 반환합니다.

  • 각 숫자를 표시하는 데 필요한 LED 개수를 저장하는 배열을 생성합니다.

  • 계산 결과를 누적할 변수를 선언합니다.

  • i를 1부터 시작하여 i가 문자열 길이보다 작을 때까지 반복문을 실행합니다.

  • 반복문 안에서 현재 숫자와 이전 숫자의 LED 개수 차이의 절댓값, 즉 abs(LED[str[i] - '0'] - LED[str[i-1] - '0'])을 결과에 더합니다.

  • 총 변경 횟수를 반환합니다.

  • 결과를 출력합니다.

예제 코드

#include<iostream>
using namespace std;
int countled(string str){
    // 각 숫자를 표시하는 데 필요한 LED 개수
    int Led[] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 5 };
    int len = str.length();
    // 변경 횟수 계산
    int res = Led[str[0] - '0'];
    for (int i = 1; i < len; i++){
        res = res + abs(Led[str[i] - '0'] - Led[str[i - 1] - '0']);
    }
    return res;
}
int main(){
    string str = "123";
    cout <<"count is "<<countled(str);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 −

count is 5