잡동사니 블로그
[백준] 1343 - 폴리오미노 (python) 본문
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
문제
민식이는 다음과 같은 폴리오미노 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 |