Algorithm/Implementation

[Softeer 기출문제] 전광판

킹우현 2023. 5. 30. 10:56

 

import sys

t = int(input())

def set_time(n):
    time = [0]*7

    if n == 0:
        time[0],time[1],time[2],time[4],time[5],time[6] = 1,1,1,1,1,1
    elif n == 1:
        time[2],time[5] = 1,1
    elif n == 2:
        time[0],time[2],time[3],time[4],time[6] = 1,1,1,1,1
    elif n == 3:
        time[0],time[2],time[3],time[5],time[6] = 1,1,1,1,1
    elif n == 4:
        time[1],time[2],time[3],time[5] = 1,1,1,1
    elif n == 5:
        time[0],time[1],time[3],time[5],time[6] =1,1,1,1,1
    elif n == 6:
        time[0],time[1],time[3],time[4],time[5],time[6] = 1,1,1,1,1,1
    elif n == 7:
        time[0],time[1],time[2],time[5] = 1,1,1,1
    elif n == 8:
        time[0],time[1],time[2],time[3],time[4],time[5],time[6] = 1,1,1,1,1,1,1
    elif n == 9:
        time[0],time[1],time[2],time[3],time[5],time[6] = 1,1,1,1,1,1

    return time

for _ in range(t):
    a,b = input().split()

    time_list_a = [[0]*7 for _ in range(5)]
    time_list_b = [[0]*7 for _ in range(5)]
    
    len_a = len(a)
    len_b = len(b)

    for i in range(len_a):
        time_list_a[4-i] = set_time(int(a[len_a-1-i]))
    
    for i in range(len_b):
        time_list_b[4-i] = set_time(int(b[len_b-1-i]))

    result = 0
    
    for i in range(5):
        count = 0
        for j in range(7):
            diff = abs(time_list_a[i][j] - time_list_b[i][j])
            count += diff
        result += count
    
    print(result)

이번 문제는 각 숫자가 7개의 전구로 이루어져 있는 전광판이 주어졌을 때, 자연수 A에서 자연수 B로 변경하기 위해 필요한 최소 스위치 클릭 횟수를 구하는 문제이다.

 

먼저 자연수가 들어왔을 때 해당 자연수를 나타내는 전광판을 return하는 함수(set_time)을 구현한 뒤에, 자연수를 2차원 리스트로 저장한 뒤에 두 리스트의 차이를 카운팅해주는 방식으로 풀이하였다.

 

단순한 구현문제이지만 다양한 풀이법을 생각해볼 수 있었던 문제였다 :)

'Algorithm > Implementation' 카테고리의 다른 글

[프로그래머스] 바탕화면 정리  (0) 2023.06.23
[프로그래머스] 공원 산책  (0) 2023.06.23
[프로그래머스] 추억점수  (0) 2023.06.23
[프로그래머스] 달리기 경주  (0) 2023.06.23
[Softeer 기출문제] GBC  (0) 2023.05.30