[Softeer]전광판 파이썬 풀이
Softeer 전광판¶
문제 page: https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=624
문제의 기본적인 아이디어는 A와 B를 각각의 자리수에 해당하는 숫자와 서로 비교하여
count를 해주는 것이다.
이를 위해서 0부터 9까지 각각의 숫자, 그리고 불이 꺼져있는 경우에 대해 스위치를 눌러야 하는 최소 횟수를 일일이 하드코딩하는 방법이 가장 먼저 떠오를 것이다.
예를 들어
1) 1 <-> 2 = 5
2) 1 <-> 4 = 2
...
등 0부터 9까지의 모든 조합의 경우의 수를 따지면 문제를 풀 수는 있을 것 같다.
하지만 이러한 하드코딩이 알고리즘 문제의 해결방안으로 주어질 것 같진 않다...
당장 경우의 수만 따지더라도 $${11 \choose 2}= 55$$
이므로 모든 case에 대해 타이핑하는 것도 힘들다.
그렇다면 문제를 어떻게 풀어야할까?
이는 각각의 스위치가 독립적으로 이루어졌다는 점에 주목을 해야한다.
In [3]:
from IPython.display import Image
Image('전광판1.png')
Out[3]:
이를 전광판의 불빛이 켜진 경우 1, 꺼진 경우 0으로 modeling을 하면 각각의 숫자를 표현할 수 있다
즉 숫자 1의 경우 3번과 7번 불빛이 들어온 경우이므로 0010001로 표현할 수 있다.
이제 불빛의 스위치로 치환된 숫자 리스트를 통해 A와 B를 각각 비교하면 문제를 구할 수 있을 것 같다.
주의해야할 점은 문제에서도 나오듯 전광판의 불빛이 모두 꺼져있는 경우(특정 자리수의 숫자가 존재 x)도 고려해야 한다는 점이다.
해답¶
In [4]:
T = int(input())
lights = {
'0': '1110111',
'1': '0010001',
'2': '0111110',
'3': '0111011',
'4': '1011001',
'5': '1101011',
'6': '1101111',
'7': '1110001',
'8': '1111111',
'9': '1111011',
' ': '0000000'
}
q = []
for _ in range(T):
A, B = [x for x in input().split()]
while len(A) < 5:
A = ' ' + A
while len(B) < 5:
B = ' ' + B
q.append((A, B))
counts = [0] * T
for i in range(len(q)):
digit_A, digit_B = q[i][0], q[i][1]
for j in range(5):
light_A, light_B = lights[digit_A[j]], lights[digit_B[j]]
for k in range(len(light_A)):
if light_A[k] != light_B[k]:
counts[i] +=1
for count in counts:
print(count)
2 1 2 9881 10724 5 11