문제
<설명>
아래와 같은 5자리 전광판이 있다.
각각의 전구, 총 35개의 전구에는 스위치가 개별적으로 달려있다.

어떤 숫자를 다른 숫자로 바꿀 때 스위치를 최소한으로 몇 번 눌러야하는지 구하시오.
<입력>
첫 번째 줄에 해결할 테스트 케이스의 수 $T$가 주어진다. ($1\leq T \leq 1000$)
다음 $T$개의 줄에는 한 줄에 테스트 케이스 하나씩이 주어진다.
각각의 줄에는 두 자연수 $A$와 $B$가 공백 하나를 사이로 두고 주어진다.
$A,B$는 한 자리 이상 다섯 자리 이하의 자연수이다.
$A,B$는 숫자 0으로 시작하지 않는다.
$A,B$는 서로 다르다.
<출력>
각각의 테스트 케이스마다 순서대로, 스위치를 눌러야 하는 최소 횟수를 한 줄에 하나씩 출력한다.
풀이
먼저 각 숫자에 따라 스위치의 on/off상태를 반환해주는 convert함수를 만들었다.
-1이라는 값은 숫자가 없는 상태를 의미한다.
def convert(n):
if n == '-1':
return [0]*7
elif n == '0':
return [1,1,1,0,1,1,1]
elif n == '1':
return [0,0,1,0,0,1,0]
elif n == '2':
return [1,0,1,1,1,0,1]
elif n == '3':
return [1,0,1,1,0,1,1]
elif n == '4':
return [0,1,1,1,0,1,0]
elif n == '5':
return [1,1,0,1,0,1,1]
elif n == '6':
return [1,1,0,1,1,1,1]
elif n == '7':
return [1,1,1,0,0,1,0]
elif n == '8':
return [1,1,1,1,1,1,1]
elif n == '9':
return [1,1,1,1,0,1,1]
4자리 숫자와 5자리 숫자를 비교하면 앞에서부터 한글자씩 비교를 하는데, 우리가 원하는 것은 숫자를 오른쪽 정렬한 후 비교하는 것이다.
따라서 f0라는 함수를 만들어 숫자를 오른쪽으로 밀어주는 효과를 내도록 했다.
다음으로 각 숫자 칸마다 몇번의 스위치 클릭이 필요한지,
해당 글자칸의 모든 7개의 스위치를 순회하며 카운트하는 함수를 만들었다.
def f0(li):
relist = []
for i in range(5-len(li)):
relist = relist + ['-1']
relist = relist + li
return relist
def diff(a,b):
cnt = 0
for i in range(7):
if a[i] != b[i]:
cnt += 1
return cnt
a = [[0]*7]*5
#print(a)
n = int(input())
for k in range(n):
count = 0
a,b = map(list, input().split())
a = f0(a)
b = f0(b)
for i in range(5):
a[i] = convert(a[i])
b[i] = convert(b[i])
for i in range(5):
count += diff(a[i],b[i])
print(count)
'알고리즘&문제풀이' 카테고리의 다른 글
| [Softeer] 21년 재직자 대회 예선 - 회의실 예약 (0) | 2025.12.11 |
|---|---|
| [Softeer] 21년 재직자 대회 예선 - 좌석관리 (0) | 2025.12.10 |
| [Softeer] 21년 재직자 대회 예선 - 비밀메뉴 (2) | 2025.12.09 |
| [백준] 1914번 - 하노이 탑 (1) | 2024.04.14 |
| [백준] 3652번 - 새트리 (5) | 2024.04.11 |