코딩테스트 대비/Softeer

[Softeer/Python] [21년 재직자 대회 예선] 전광판 ★★☆☆☆ - 효과는 굉장했다!

bluetag_boy 2021. 11. 9. 16:29
반응형
 

Softeer

제한시간 : C/C++/Java/JS/Python(1초)| 메모리 제한 : 1024MB 제약조건 하나의 입력에서 1개 이상 1000개 이하의 테스트 케이스를 해결해야 한다. A와 B는 한 자리 이상 다섯 자리 이하의 자연수이다. A와 B

softeer.ai

 

SOLUTION

import sys

# 각 숫자에서 빈 전광판,0,1,2,3,4,5,6,7,8,9 로 바뀔 때 눌러야하는 스위치 횟수 dictionary 형태로 저장 
# 마지막 ' ' 는 빈 전광판 에서 숫자로 바뀔 때 눌러야하는 스위치 횟수
num = {
    '0' : ['6','0','4','3','3','4','3','2','2','1','2'], '1' : ['2','4','0','5','3','2','5','6','2','5','4'], '2' : ['5','3','5','0','2','5','4','3','5','2','3'],
    '3' : ['5','3','3','2','0','3','2','3','3','2','1'], '4' : ['4','4','2','5','3','0','3','4','2','3','2'], '5' : ['5','3','5','4','2','3','0','1','3','2','1'], 
    '6' : ['6','2','6','3','3','4','1','0','4','1','2'], '7' : ['4','2','2','5','3','2','3','4','0','3','2'], '8' : ['7','1','5','2','2','3','2','1','3','0','1'],
    '9' : ['6','2','4','3','1','2','1','2','2','1','0'], ' ' : ['6','2','5','5','4','5','6','4','7','6']
    } 

T = int(sys.stdin.readline())

for _ in range(T):
    A, B = sys.stdin.readline().rstrip().split()
    answer = 0

    if len(A) == len(B): #  A,B 의 길이가 서로 같다면 앞에 빈 전광판은 무시해도 되므로 바로 리스트화 시킨다
        A_list = list(A)
        B_list = list(B)

    # A, B가 각각 문자열 길이가 5 이면 그대로 리스트화 , 5보다 작다면 오른쪽 정렬시키고 나머지는 빈 전광판과 같은 여백으로 채운다
    else:  
        if len(A) < 5:
            A_list = list(A.rjust(5, ' '))

        elif len(A) == 5:
            A_list = list(A)

        if len(B) < 5:
            B_list = list(B.rjust(5, ' '))

        elif len(B) == 5:
            B_list = list(B)

    for i, j in zip(A_list, B_list): # zip() 함수를 이용해 같은 위치의 전광판 현황을 비교한다
        if i == " " and j == " ": # 둘다 빈공간이면 바꿀 게 없으므로 pass
            pass

        elif i == " " and j != " ": # i만 여백이고 j는 여백이 아니면 key에 해당하는 value값을 int형태로 answer에 더해준다
            answer += int(num[i][int(j)])

        elif i != " " and j == " ":  # i가 여백이 아니고 j만 여벡이면 key에 해당하는 첫번째 value 값을 answer에 더해준다
            answer += int(num[i][0]) # 각각의 key에 해당하는 0번째 index는 빈 전광판으로 바꿔주는 횟수이기 때문이다.
                    
        else: # 둘다 여백이 아니라면 key에 해당하는 j+1 번째 value 값을 int형태로 answer에  더해준다 / j+1 번째 인 이유는 첫번째가 빈 전광판으로 바꿔주는 횟수이기 떄문
            answer += int(num[i][int(j)+1])

    print(answer)

 

각 숫자에서 요구하는 숫자로 전광판이 바뀔 때 눌러야하는 스위치 횟수를 dictionary 형태로

미리 저장시키는 방법으로 문제를 해결했다.