[Baekjoon] 16113. 시그널

섬섬's 개발일지·2022년 3월 14일
0

baekjoon

목록 보기
20/20
시간 제한메모리 제한
1초512MB

문제

시그널은 0과 1로 이루어져 있는데, 편의상 0을 '.', 1을 '#'으로 표시한다. 시그널은 다음과 같았다.
###.....###.#..####.#.......#.#....####.....###.#....##.#.......#.#....####.....###.#....#
시그널을 같은 길의의 5개의 시그널로 쪼겠다. 아래는 시그널을 쪼갠 뒤 '#'을 검은색, '.'을 흰색으로 표시한 그림이다.

[시그널의 규칙]
1. 시그널은 '.'와 '#'으로 이루어져 있다.
2. 시그널을 해독한 결과에는 반드시 숫자가 1개 이상 있다.
3. 시그널에 등장하는 모든 '#'은 올바른 숫자 패턴에 포함되어 있다.
4. 숫자와 숫자 사이에는 1열 이상의 공백이 있다. 여기서 공백은, 열의 성분이 모두 '.'인 열을 의미한다.
5. 0부터 9는 아래와 같이 나타난다. 역시 '#'을 검은색, '.'을 흰색으로 표시했다.

주의할 점은, 1은 다른 숫자들과는 다르게 1열을 차지한다는 것이다.

입력

  • 첫째 줄: 시그널의 길이 N (5<=N<=100,000, N은 5의 배수)이 주어진다.
  • 둘째 줄: 시그널

출력

시그널을 해독하여 나오는 숫자들을 순서대로 출력한다.

코드

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))
profile
섬나라 개발자

0개의 댓글

관련 채용 정보