[ BOJ / Python ] 1343번 폴리오미노

황승환·2021년 12월 29일
0

Python

목록 보기
67/498

이번 문제는 그리디 알고리즘을 이용하여 보드판을 검사하며 .이 나왔을 때에 이전의 X의 갯수를 확인하여 X의 갯수가 홀수일 경우 폴리오미노로 채울 수 없다고 판단하여 -1을 출력하고 짝수일 경우 cnt를 0으로 갱신하여 . 이후의 X의 갯수를 새로 카운팅하도록 하였다. 보드판의 가장 마지막 문자가 .이 아닐 경우 제대로 판별할 수 없기 때문에 보드판을 입력받은 후 .를 따로 추가해주었다.

  • board를 입력받는다.
  • board의 끝 부분을 판별하기 위해 .를 보드에 추가한다.
  • board에서 붙어있는 X의 갯수를 세기 위한 변수 cnt를 0으로 정의한다.
  • 덮을 수 있는지의 여부를 판단하기 위한 변수 answer를 0으로 정의한다. 0일 경우 덮을 수 있고 -1일 경우 덮을 수 없다고 지정하였다.
  • 0부터 board의 길이만큼 반복하는 i에 대한 for문을 돌린다.
    -> 만약 board[i]가 X일 경우 cnt를 1 증가시킨다.
    -> 만약 board[i]가 .일 경우,
    --> cnt%2가 0일 경우 answer를 그대로 두고 0이 아닐 경우 answer를 -1로 갱신한 뒤 반복문을 탈출한다.
  • 만약 answer가 0일 경우
    -> board의 XXXX를 AAAA로 갱신한다.
    -> board의 XX를 BB로 갱신한다.
    -> 처음에 board의 끝에 .를 붙였으므로 board[:-1]를 출력한다.
  • answer가 -1일 경우 answer를 출력한다.

Code

board=str(input())
board+='.'
cnt=0
answer=0
for i in range(len(board)):
    if board[i]=='X':
        cnt+=1
    if board[i]=='.':
        if cnt%2==0:
            continue
        else:
            answer=-1
            break
if answer==0:
    board=board.replace('XXXX', 'AAAA')
    board=board.replace('XX', 'BB')
    print(board[:-1])
else:
    print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글