이번 문제에서는 숫자 n과 또 다른 입력값 c가 주어졌을 때, n을 7세그먼트 디스플레이로 표시할 수 있는지 확인해야 합니다. 단, 여기에는 하나의 제약 조건이 있습니다. 바로 최대 c개의 LED만 켤 수 있다는 점입니다.
예를 들어 입력이 n = 315, c = 17이라면 출력은 True가 됩니다. 315를 표시하는 데 필요한 LED는 12개뿐이고, 사용 가능한 LED는 17개이기 때문입니다.
7세그먼트 디스플레이의 LED 개수
각 숫자(0~9)를 표시하는 데 필요한 LED 개수는 다음과 같습니다.
- 0 → 6개
- 1 → 2개
- 2 → 5개
- 3 → 5개
- 4 → 4개
- 5 → 5개
- 6 → 6개
- 7 → 3개
- 8 → 7개
- 9 → 6개
따라서 이 문제를 해결하기 위해서는 다음 단계를 따릅니다.
- seg := 각 숫자의 LED 개수를 담은 리스트 [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
- s := n을 문자열로 변환
- led_count := 0으로 초기화
- i를 0부터 s의 길이 - 1까지 반복
- led_count := led_count + seg[s의 i번째 문자에 해당하는 값]
- 만약 led_count <= c라면
- True 반환
- 그렇지 않으면 False 반환
예제 코드
아래 구현 예제를 통해 더 잘 이해해 보겠습니다.
seg = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
def solve(n, c) :
s = str(n)
led_count = 0
for i in range(len(s)) :
led_count += seg[ord(s[i]) - 48]
if led_count <= c:
return True
return False
n = 315
c = 17
print(solve(n, c))입력
315, 17
출력
True
위 코드에서 ord(s[i]) - 48은 문자 형태의 숫자를 정수 인덱스로 변환하는 역할을 합니다. 아스키 코드에서 문자 '0'은 48이므로, 각 자리 문자에서 48을 빼면 해당 숫자에 맞는 인덱스가 됩니다. 이렇게 계산된 총 LED 개수가 허용치 c 이하인지 비교하여 결과를 판별합니다. 시간 복잡도는 숫자의 자릿수에 비례하므로 O(d)이며, 여기서 d는 n의 자릿수입니다.