시간 제한 | 메모리 제한 |
---|---|
1초 | 512MB |
시그널은 0과 1로 이루어져 있는데, 편의상 0을 '.', 1을 '#'으로 표시한다. 시그널은 다음과 같았다.
###.....###.#..####.#.......#.#....####.....###.#....##.#.......#.#....####.....###.#....#
시그널을 같은 길의의 5개의 시그널로 쪼겠다. 아래는 시그널을 쪼갠 뒤 '#'을 검은색, '.'을 흰색으로 표시한 그림이다.
[시그널의 규칙]
1. 시그널은 '.'와 '#'으로 이루어져 있다.
2. 시그널을 해독한 결과에는 반드시 숫자가 1개 이상 있다.
3. 시그널에 등장하는 모든 '#'은 올바른 숫자 패턴에 포함되어 있다.
4. 숫자와 숫자 사이에는 1열 이상의 공백이 있다. 여기서 공백은, 열의 성분이 모두 '.'인 열을 의미한다.
5. 0부터 9는 아래와 같이 나타난다. 역시 '#'을 검은색, '.'을 흰색으로 표시했다.
주의할 점은, 1은 다른 숫자들과는 다르게 1열을 차지한다는 것이다.
시그널을 해독하여 나오는 숫자들을 순서대로 출력한다.
n = int(input())
signal = input()
# 5개로 쪼개기
size = n // 5
s, row = [], 0
for i in range(5):
s.append([1 if x == '#' else 0 for x in signal[row:row+size]])
row += size
# 열이 전부 0이면 false 반환
def checkColumn(column):
for i in range(5):
if s[i][column] == 1:
return True
return False
zero = [[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]]
two = [[1,1,1],[0,0,1],[1,1,1],[1,0,0],[1,1,1]]
three = [[1,1,1],[0,0,1],[1,1,1],[0,0,1],[1,1,1]]
four = [[1,0,1],[1,0,1],[1,1,1],[0,0,1],[0,0,1]]
five = [[1,1,1],[1,0,0],[1,1,1],[0,0,1],[1,1,1]]
six = [[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]]
seven = [[1,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]]
eight = [[1,1,1],[1,0,1],[1,1,1],[1,0,1],[1,1,1]]
nine = [[1,1,1],[1,0,1],[1,1,1],[0,0,1],[1,1,1]]
def getNum(column):
# 1인 경우
if column == size-1 or not checkColumn(column + 1):
return '1'
num = [[0] * 3 for _ in range(5)]
for x in range(5):
for y in range(3):
num[x][y] = s[x][column+y]
if num == zero: return '0'
elif num == two: return '2'
elif num == three: return '3'
elif num == four: return '4'
elif num == five: return '5'
elif num == six: return '6'
elif num == seven: return '7'
elif num == eight: return '8'
elif num == nine: return '9'
result = []
col = 0 # 숫자가 시작하는 index
while col < size:
# 열이 전부 0이 아닌 경우
if checkColumn(col):
num = getNum(col)
result.append(num)
if num == '1': col += 2
else: col += 4
else:
col += 1
print(''.join(result))