잡동사니 블로그
[백준] 1343 - 폴리오미노 (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
풀이
a=input()
ans=''
b=0
flag=0
cnt = 0
if len(a) != 1 :
for i in a :
cnt +=1
if i == '.' and flag == 0 :
ans+=i
if i =='X':
b += 1
flag=1
if i == '.' and flag == 1 :
if b % 2 != 0 :
ans = -1
break
t = b//4
q = (b%4)//2
ans += ('AAAA'*t)+('BB'*q)
ans += i
flag = 0
b=0
if i != '.' and len(a) == cnt :
t = b//4
q = (b%4)//2
ans += ('AAAA'*t)+('BB'*q)
if b % 2 != 0 :
ans = -1
else :
if a == '.':
print(a)
else :
print(-1)
print(ans)
a를 입력 받았을 때 길이가 1인지 아닌지 부터 판별 하였다.
그리고 나서 . 이면 . 그대로 출력을 해야하며 A일 경우엔 -1을 출력해야 하기 때문에 if len(a) -> else -> if a == '.' 이런식으로 구분 하였다.
그리고 길이가 1이 아닐경우엔 X의 개수를 더해서 .을 만나면 X의 개수를 카운트 하여 4로 나눈 몫 나머지는 2로 나눈 몫을 계산하여 ans라는 변수에 추가하였다.
.같은 경우는 반복문에서 나올 때 마다 .을 ans 변수에 계속 추가하였고,
카운트한 변수(cnt)가 홀수일 경우 break를 하여 -1를 출력하였다.
코드가 좀 난잡한거 같아서 다른사람의 풀이도 보았는데
문자열을 replace로 간단한 문제였던걸 확인했었다.
ans = input()
ans = ans.replace("XXXX", "AAAA")
ans = ans.replace("XX", "BB")
if 'X' in ans:
print(-1)
else:
print(ans)
'Python > 백준' 카테고리의 다른 글
[백준] 2563 - 색종이 (python) (0) | 2023.02.11 |
---|---|
[백준] 13305 - 주유소 (python) (0) | 2023.02.11 |
[백준] 1474 - 밑 줄 (python) (0) | 2023.01.23 |
[백준] 1316 - 그룹 단어 체커 (python) (0) | 2023.01.21 |
[백준] 1018 - 체스판 다시 칠하기 (python) (0) | 2023.01.16 |