티스토리 뷰

728x90

https://www.acmicpc.net/problem/1343

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net


  • 해설 : 

X와 "." 으로 이루어진 문자열을 'AAAA'와 'BB'로 치환할 수 있는지 찾는 문제이다. 치환할 수 있다면 사전순으로 가장 앞서는 치환값을 출력하면 된다.

 

 

 


  • 풀이 :

주어진 문자열을 탐색하며 X를 만났을 때 연속되는 X의 개수를 센다. X의 개수가 홀수개라면 -1을 리턴하고 아니라면 AAAA 또는 BB로 치환한다. AAAA가 들어갈 수 있을 때 우선적으로 넣어줘야 사전순으로 앞서는 답을 도출할 수 있다.

 

 

 


  • 소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import sys
input = sys.stdin.readline
 
if __name__ == "__main__":
    board = input()
    answer = []
    cnt = 0
    flag = True
    for key in board:
        if key == 'X':
            cnt +=1
        else:
            if cnt % 2 == 1:
                print(-1)
                exit()
            while cnt >= 2:
                if cnt >= 4:
                    answer.append('AAAA')
                    cnt -= 4
                elif cnt >= 2:
                    answer.append('BB')
                    cnt -= 2
            answer.append('.')
    del answer[-1]
    print(''.join(answer))
cs
320x100
댓글
© 2022 WonSeok, All rights reserved