폴리오미노
문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
예제 입력 1
XXXXXX
예제 출력 1
AAAABB
예제 입력 2
XX.XX
예제 출력 2
BB.BB
예제 입력 3
XXXX....XXX.....XX
예제 출력 3
-1
예제 입력 4
X
예제 출력 4
-1
예제 입력 5
XX.XXXXXXXXXX..XXXXXXXX...XXXXXX
예제 출력 5
BB.AAAAAAAABB..AAAAAAAA...AAAABB
정답코드(replace를 알기 전..)
# 사용자로부터 입력을 받음
board = input()
# 입력받은 문자열을 '.'을 기준으로 분리하여 리스트로 만듦
board_list = list(board.split("."))
# 리스트의 길이를 구함
leng = len(board_list)
# 리스트를 역순으로 순회
for i in range(leng-1, -1, -1):
if board_list[i] == '': # 만약 요소가 빈 문자열이면, '.'으로 대체
board_list[i] = '.'
# 리스트의 현재 위치를 추적하기 위한 인덱스 초기화
index = 0
# board_list의 각 요소를 순회
for i in board_list:
if i == '.': # 만약 요소가 '.'이면, 현재 반복을 건너뜀
index += 1
continue
# 문자열의 길이가 홀수인 경우, 'AAAA' 또는 'BB'로 균등하게 나눌 수 없으므로 -1을 출력하고 종료
if len(i) % 2 == 1:
print(-1)
exit()
# 문자열의 길이가 4보다 크고 4로 나눴을 때 나머지가 2인 경우,
# 'AAAA'로 채운 뒤 'BB'를 붙이고 '.'을 추가
elif len(i) > 4 and len(i) % 4 == 2:
board_list[index] = "AAAA" * (len(i) // 4) + "BB" + '.'
# 문자열의 길이가 4로 나눠 떨어지는 경우, 'AAAA'로만 채우고 '.'을 추가
elif len(i) % 4 == 0:
board_list[index] = "AAAA" * (len(i) // 4) + '.'
# 그 외의 경우, 2로 나눠 떨어지면 'BB'로 채우고 '.'을 추가
else:
board_list[index] = "BB" + '.'
# 인덱스 증가
index += 1
# 리스트를 다시 하나의 문자열로 합침
result = ''.join(board_list)
# 마지막 문자가 '.'이므로 그 문자를 제외하고 출력
print(result[0:len(result)-1])
코드2
board = input()
board = board.replace("XXXX", "AAAA")
board = board.replace("XX", "BB")
if 'X' in board:
print(-1)
else:
print(board)
코드의 가독성이 달라졌다
'백준' 카테고리의 다른 글
2024.10.4 백준(Python) 1920 수 찾기 (0) | 2024.10.04 |
---|---|
2024.9.18 백준(Python) 1026 보물 (1) | 2024.09.18 |
2024.9.6 백준(Python) 1966 프린터 큐 (1) | 2024.09.06 |
2024.9.4 백준(Python) 1476 날짜 계산 (0) | 2024.09.04 |
2024.9.4 백준(Python) 1427 소트인사이드 (0) | 2024.09.04 |