[ BOJ / Python ] 1343번 폴리오미노
이번 문제는 그리디 알고리즘을 이용하여 보드판을 검사하며 .이 나왔을 때에 이전의 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)
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)
Author And Source
이 문제에 관하여([ BOJ / Python ] 1343번 폴리오미노), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xx0hn/BOJ-Python-1343번-폴리오미노저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)