728x90
반응형
https://www.acmicpc.net/problem/2290
문제
지민이는 새로운 컴퓨터를 샀다. 하지만 새로운 컴퓨터에 사은품으로 온 LC-디스플레이 모니터가 잘 안나오는 것이다. 지민이의 친한 친구인 지환이는 지민이의 새로운 모니터를 위해 테스트 할 수 있는 프로그램을 만들기로 하였다.
입력
첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.
출력
길이가 s인 '-'와 '|'를 이용해서 출력해야 한다. 각 숫자는 모두 s+2의 가로와 2s+3의 세로로 이루어 진다. 나머지는 공백으로 채워야 한다. 각 숫자의 사이에는 공백이 한 칸 있어야 한다.
풀이
Code
s, n = map(str, input().rstrip().split())
s = int(s)
# 1. 숫자별 필요한 구역 생성
numbers = {'0' : [1, 2, 3, 5, 6, 7], '1' : [3, 7], '2' : [2, 3, 4, 5, 6], '3' : [2, 3, 4, 6, 7],
'4' : [1, 3, 4, 7], '5' : [1, 2, 4, 6, 7], '6' : [1, 2, 4, 5, 6, 7],
'7' : [2, 3, 7], '8' : [1, 2, 3, 4, 5, 6, 7], '9' : [1, 2, 3, 4, 6, 7]}
# 2. 출력 리스트 생성
answer = [[] for _ in range(2 * s + 3)]
# 3.
for number in n :
# 3-1. 숫자 리스트 생성
number_lst = [[' ' for _ in range(s+2)] for _ in range(2 * s + 3)]
# 3-2.
for area in numbers[number] :
string = '-' if area % 2 == 0 else '|'
if area == 1 :
for i in range(1, 1 + s) : number_lst[i][0] = string
elif area == 2 :
for j in range(1, 1 + s) : number_lst[0][j] = string
elif area == 3 :
for i in range(1, 1 + s) : number_lst[i][-1] = string
elif area == 4 :
for j in range(1, 1 + s) : number_lst[len(number_lst) // 2][j] = string
elif area == 5 :
idx = len(number_lst) // 2 + 1
for i in range(idx, idx + s) : number_lst[i][0] = string
elif area == 6 :
for j in range(1, 1 + s): number_lst[-1][j] = string
else :
idx = len(number_lst) // 2 + 1
for i in range(idx, idx + s) : number_lst[i][-1] = string
# 3-3. 행 별로 출력 리스트에 삽입
for i in range(2 * s + 3) :
answer[i] += number_lst[i] + [' ']
# 4. 결과 출력
for line in answer :
print(''.join(line))
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 1325. 효율적인 해킹 (0) | 2023.09.02 |
---|---|
[Python/BOJ] 15812. 침략자 진아 (0) | 2023.09.02 |
[Python/BOJ] 2580. 스도쿠 (1) | 2023.08.21 |
[Python/BOJ] 16987. 계란으로 계란치기 (0) | 2023.08.20 |
[Python/BOJ] 20208. 진우의 민트초코우유 (0) | 2023.08.20 |