728x90
> Python, 구현, 그리디 알고리즘
📖 문제 : 폴리오미노 (Python)
민식이는 다음과 같은 폴리오미노 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
내 코드
if __name__ == "__main__":
str1 = input()
str2 = list(map(str, str1.split('.')))
str3 = list(map(str, str1.split('X')))
temp = ''
answer = ''
str_x = []
str_dot = []
idx_x = 0
idx_dot = 0
for w in range(len(str2)): # str_x 리스트에 X로 구성된 문자열만 저장
if str2[w] != '':
str_x.append(str2[w])
for q in range(len(str3)): # str_dot 리스트에 .로 구성된 문자열만 저장
if str3[q] != '':
str_dot.append(str3[q])
for i in range(len(str_x)):
if int(len(str_x[i]) % 2) != 0: # X의 수가 홀수개면 AAAA 또는 BB 로 덮을 수 없기에 -1 출력
print(-1)
break
elif int(len(str_x[i]) % 4) == 0: # X의 수가 4로 나눈 나머지가 0, AAAA 로만 덮을 수 있는 경우
for _ in range(int(len(str_x[i]) / 4)):
temp += 'AAAA'
else:
if int(len(str_x[i]) / 4) >= 1: # X의 수가 4로 나눈 나머지가 0보다 크면 , AAAA와 BB로 덮을 수 있는 경우
for _ in range(int(len(str_x[i]) / 4)): # AAAA로 먼저 덮은 후
temp += "AAAA"
for _ in range(int(len(str_x[i]) % 4 / 2)): # BB로 덮기
temp += "BB"
else:
for _ in range(int(len(str_x[i]) / 2)): # X의 수가 4로 나눈 나머지가 0보다 작으면 , BB로만 덮을 수 있는 경우
temp += "BB"
str_x[i] = temp
temp = ''
else:
if str1[0] == '.': # 주어진 문자열의 첫 문자가 .으로 이루어 졌을 경우
for i in range(1, len(str_x) + len(str_dot) + 1):
if int(i % 2) != 0:
answer += str_dot[idx_dot]
idx_dot += 1
else:
answer += str_x[idx_x]
idx_x += 1
else: # 주어진 문자열의 첫 문자가 X으로 이루어 졌을 경우
for i in range(1, len(str_x) + len(str_dot) + 1):
if int(i % 2) == 0:
answer += str_dot[idx_dot]
idx_dot += 1
else:
answer += str_x[idx_x]
idx_x += 1
print(answer)
Point ! ⭐️
- 제가 짠 코드는 너무 길고 충분히 주석으로 이해하실 거라고 생각합니다.
5줄로 이루어진 멋진 코드가 있더라구요. 참고하세요
정말 멋진 코드 ! 👏🏻
board = input()
board = board.replace("XXXX", "AAAA")
board = board.replace("XX", "BB")
if 'X' in board:
print(-1)
else:
print(board)
레전드네요 . . 👏🏻
백준
https://www.acmicpc.net/problem/1343
참고
728x90
'Algorithm (Python, Java, SQL) > BaekJoon' 카테고리의 다른 글
[백준 1158번] 요세푸스 문제 (Python) (0) | 2023.06.20 |
---|---|
[백준 10773번] 제로 (Python) (0) | 2023.06.20 |
[백준 7568번] 덩치 (Python) (0) | 2023.06.19 |
[백준 10828번] 스택 (Python) (시간초과 날 경우, 매번 출력X -> 문자열 추가하여 한번에 출력하기) (0) | 2023.06.19 |
[백준 1316번] 그룹 단어 체커 (Python) (딕셔너리에 원소가 있는지 검색할 땐 그냥 if x in dic) (0) | 2023.06.14 |