[백준 | 파이썬] 1343 : 폴리오미노

devheyrin·2022년 2월 28일
0

codingtest

목록 보기
16/65
💡 어렵게 생각하다가 30분 걸린 풀이.. 간단하게 생각하자!!!

문제

민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB

이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.

폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.

출력

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

풀이 방법

간단한 나누기 연산으로 해결할 수 있다.

주의할 점은 . 이 포함된 경우와 연속길이가 홀수인 경우!

두 가지만 주의하면 깔끔하게 풀이할 수 있다.

  • 입력에 . 이 포함된 경우가 있을 수 있기 때문에, . 을 기준으로 쪼개서 리스트화한다. 이렇게 하면 . 이 포함되지 않은 경우에는 길이가 1인 리스트가 생성된다.
  • 리스트를 돌면서 원소 하나당 길이(연속길이)가 홀수인 경우 -1을 출력하고 코드를 종료한다.
  • 연속길이가 짝수이면 길이를 4로 나눈 몫 만큼 'AAAA'를 추가하고, 추가된 A만큼을 제외하고 남은 길이를 다시 2로 나눈 몫 만큼 'BB'를 추가한다.
  • 구분자를 . 으로 해서 출력하면 출력 형식에 맞는 결과를 출력할 수 있다.

코드

# 길이가 홀수면 불가능

polio = input()
array = list(polio.split('.'))

for i in range(len(array)):
    p = len(array[i])
    if p % 2 == 1:
        print(-1)
        quit()
    else:
        a_cnt = (p//4) * 4
        b_cnt = (p-a_cnt)//2 * 2
        array[i] = 'A'*a_cnt + 'B'*b_cnt

print(*array, sep='.')

간단하게 풀리는 문제였는데 어렵게 생각하다가 시간을 오래 잡아먹었다.

profile
개발자 헤이린

0개의 댓글