백준_1343_파이썬

Frog_log·2024년 9월 16일

문제 핵심

주어진 것
두개의 폴리오미노 AAAA, BB

알고리즘
'X'와 '.'으로 주어진 보드 판을 덮는다.

출력
폴리오미노로 덮은 보드판을 출력한다.

구현

  1. 'X'와 '.'가 주어진다.
  2. 주어진 폴리오미노 2개로 덮을 수 있는 것은 연속된 X4 혹은 X2 뿐이다. (2의 배수)
  3. 덮을 수 없다면 -1 을 리턴한다.

X를 마주하면 stack에 넣고, .을 마주하면 stack에 있는 board를 폴리오미노로 덮는다. stack에 들어있는 board의 갯수가 2의 배수가 아니라면 폴리오미노로 덮을 수 없는 입력이니 -1을 출력, 덮을 수 있다면 덮어서 answer에 저장

놓칠 수 있는 부분

for 문으로 board를 돌리면, 마지막 케이스에 대한 처리를 따로 해줘야하는 경우가 생길 수도 있다.

def process_stack(stack, answer):
    if len(stack) % 2 != 0:
        print(-1)
        exit()
    answer.append('AAAA' * (len(stack) // 4))
    if len(stack) % 4 != 0:
        answer.append('BB')

board = list(input())
answer = []
stack = []

for letter in board:
    if letter == 'X':
        stack.append(letter)
    else:
        if stack:
            process_stack(stack, answer)
            stack = []
        answer.append('.')

if stack:
    process_stack(stack, answer)

print(''.join(answer))
profile
신입 개발자

0개의 댓글