본문 바로가기
Algorithm/Softeer

[Softeer / Level2] [21년 재직자 대회 예선] 전광판

by 개복취 2023. 10. 6.

https://www.softeer.ai/practice/info.do?idx=1&eid=624 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

www.softeer.ai

 


 

처음 생각한건 (ON + OFF)횟수 테이블을 만들어서 A 에서 B로 가는 서로의 숫자만 안다면, 점등 되어있는 불빛의 차로 어떻게 할 수 있지 않을까? 생각했었다.

숫자는 점등되어있는 갯수

해당 테이블을 모두 채우진 않았지만, 2차원배열로 만들어서 해볼만한 것 같다고 생각 했는데 너무 오래걸려서 중도 포기 했다..

 

해답은 내 아이디어랑 비슷하게 딕셔너리 테이블을 만들어서 접근하는 방식 이었다.
내 방법보다 더 세련된 방식으로 아래와 같이 점등되는 위치를 인덱스로 잡아서 정의하는 것 이었다.

생각을 해봐야 하는 부분은

  1. (자릿수가 알맞지 않는경우) 패딩 설정해주기
  2. 설정해준 패딩 숫자값 올려주기
  3. 지정된 서로 다른 값을 비교해서 binary 값 따라서 카운터 올려주기

<내 코드>

import sys

input = sys.stdin.readline

counter = {
    '0':'1110111',
    '1':'0100100',
    '2':'1101011',
    '3':'1101110',
    '4':'0111100',
    '5':'1011110',
    '6':'1011111',
    '7':'1110100',
    '8':'1111111',
    '9':'1111110',
}

T = int(input())
for _ in range(T):
    cnt = 0
    A, B = (input().split())
    A = list(A.rjust(5, '#'))
    B = list(B.rjust(5, '#'))

    for i in range(5):
        if A[i] == B[i]:
            continue
        elif A[i] == '#':
            cnt += counter[B[i]].count('1')
        elif B[i] == '#':
            cnt += counter[A[i]].count('1')
        else:
            Astr = counter[A[i]]
            Bstr = counter[B[i]]
            for j in range(7):
                if Astr[j] != Bstr[j]:
                    cnt += 1

    print(cnt)