Cherry & Cherish
[Python3] 백준(Baekjoon) 폴리오미노 1343 본문

문제 :
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
접근 :
최대한 문제 그대로 단순무식하게 풀이하려고 했다.
while문 안에서 X가 나왔을 때는 연달아 나오는 X의 개수를 세서 그 개수가 4의 배수일 때는 'AAAA'를 누적하고, 2의 배수일 때는 4로 나눈 몫 만큼 'AAAA'를 곱해서 누적한뒤에 'BB'를 누적한다. 그리고 arr을 삭제해버린다. arr이 모두 없어지거나, 4의 배수도, 2의 배수도 아닐 때는 바로 -1를 입력해 while 문 자체가 끝나게 한다.
다시 푼다면, 입력을 '.'을 기준으로 str을 나눠서, 'XXXXXX'가 리스트의 한 객체가 되도록 푸는 것이 훨씬 효율적일 것 같다.
초반 입력을 너무 꼬아서 받은 것 같다.
풀이 :
arr=list(map(str, input()))
ans = ''
while arr and ans != '-1':
if arr[0] == 'X':
temp = 0
for i in range(len(arr)):
if arr[i] == 'X':
temp += 1
elif arr[i] == '.':
break
if temp % 4 == 0 :
now = temp // 4
ans += ('AAAA' * now)
elif temp % 4 == 2:
now = temp // 4
if now != 0 :
ans += ('AAAA'*now)
ans += 'BB'
else :
ans += 'BB'
else :
ans = '-1'
break
del arr[:temp]
elif arr[0] == '.':
ans += arr[0]
arr.pop(0)
print(ans)
다른 풀이를 참고해보니, replace를 사용하면 정말 간단하게 풀 수 있다.
board = input()
board = board.replace("XXXX", "AAAA")
board = board.replace("XX", "BB")
if 'X' in board:
print(-1)
else:
print(board)
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python3] 백준(Baekjoon) 설탕배달 2839 (0) | 2023.01.27 |
---|---|
[Python3] 백준(Baekjoon) 로프 2217 (0) | 2023.01.27 |
[Python3] 백준(Baekjoon) 제로 10773 (0) | 2022.03.03 |
[Python3] 백준(Baekjoon) 괄호 9012 (0) | 2022.03.03 |
[Python3] 백준(Baekjoon) 단어 순서 뒤집기 12605 (0) | 2022.03.03 |