본문 바로가기

알고리즘/백준 문제 풀이

[Python] 2290번 LCD Test

728x90

https://www.acmicpc.net/problem/2290

 

2290번: LCD Test

첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.

www.acmicpc.net


 

24/02/04

 

 

좀 귀찮은 구현 문제로, 침착하게 구현하면 맞을 수 있는 문제이다.


 

문제 접근 방식:

 

 

문제의 요구 사항은 꽤나 명확한 편이다. 숫자의 크기가 주어지고, 이 크기를 가지는 숫자를 그대로 출력하면 된다.

 

나는 숫자 하나와 그 크기를 입력 받아 그 크기를 가지는 숫자를 리스트로 반환하는 함수를 구현했다.

 

아래 코드를 보면 알 수 있듯, $8$의 경우는 모든 세그먼트가 다 켜진다고 간주할 수 있기 때문에 이를 중심으로 먼저 구현해 주었다.

 

나머지 숫자들은 각 세그먼트들을 조합하여 만들 수 있기 때문에 코드를 $8$의 경우를 구현한 뒤, 그 코드를 복붙하여 구현하는 방식으로 진행했다.

 


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 2290번 LCD Test
# 구현
import sys
input = sys.stdin.readline

s, n = input().rstrip().split()
def number(s, num):
    string = [[' ' for _ in range(s+2)] for _ in range(2*s+3)]
    if num == 0:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][0] = '|'
            string[i][-1] = '|'
            string[s+1+i][0] = '|'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    elif num == 1:
        for i in range(1, s+1):
            string[i][-1] = '|'
            string[s+1+i][-1] = '|'
    elif num == 2:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][-1] = '|'
            string[s+1][i] = '-'
            string[s+1+i][0] = '|'
            string[-1][i] = '-'
    elif num == 3:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][-1] = '|'
            string[s+1][i] = '-'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    elif num == 4:
        for i in range(1, s+1):
            string[i][0] = '|'
            string[i][-1] = '|'
            string[s+1][i] = '-'
            string[s+1+i][-1] = '|'
    elif num == 5:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][0] = '|'
            string[s+1][i] = '-'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    elif num == 6:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][0] = '|'
            string[s+1][i] = '-'
            string[s+1+i][0] = '|'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    elif num == 7:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][-1] = '|'
            string[s+1+i][-1] = '|'
    elif num == 8:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][0] = '|'
            string[i][-1] = '|'
            string[s+1][i] = '-'
            string[s+1+i][0] = '|'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    else:
        for i in range(1, s+1):
            string[0][i] = '-'
            string[i][0] = '|'
            string[i][-1] = '|'
            string[s+1][i] = '-'
            string[s+1+i][-1] = '|'
            string[-1][i] = '-'
    return string

def solve(s, n):
    k = len(n)
    mat = []
    for num in n:
        mat.append(number(s, int(num)))
    for j in range(2*s+3):
        for i in range(k):
            print(*mat[i][j], end = ' ', sep = '')
        print()

s = int(s)
solve(s, n)