Kim Seon Deok

[백준] 1343번 폴리오미노 본문

python/Algorithm

[백준] 1343번 폴리오미노

seondeok 2022. 1. 6. 22:16

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

 

1343번: 폴리오미노

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

www.acmicpc.net

Board = input()

i = 0
while True:
    if i >= len(Board):
        break
    
    elif Board[i:i+4] == "XXXX":
        i += 4
        Board = Board.replace("X","A",4)
        
        

    elif Board[i:i+2] == "XX":
        i += 2
        Board = Board.replace("X","B",2)
        

    elif Board[i] == ".":
        i += 1

    

    else: 
        Board = -1
        break

    
print(Board)
    
 
처음에는 for문으로 풀었지만 index의 범위를 벗어나, while문에 무한루프를 걸어주었다.
    
1. .과 x 로 이루어진 보드판을 입력받음
2. .는 그대로 출력
3. X는 4번 연속되면 A로, 2번 연속되면 B로 출력
4. X가 홀수개일 경우 -1을 출력

<또 다른 풀이>

맨 처음 문제를 읽고 replace함수가 떠오르지 않아서 풀었던 방법이다.

Board = input()

dot = []  # .의 위치를 담을 빈 리스트
for j in range(0,len(Board)):
    if Board[j] == ".":
        dot.append(j)

board = list(Board.split("."))   # 맨 처음에 입력받은 Board를 . 을 기준으로 split


counter = 0  # X덩어리의 길이가 홀수개인지 세리는 변수
for k in range(0, len(board)):
    if board[k].count("X") % 2 == 1: # X 덩어리의 길이가 홀수라면 
        counter += 1


if counter >=1 :  # X 덩어리의 길이가 홀수인 요소가 리스트에 한개라도 존재한다면
    board.clear()  # 리스트 내의 모든 요소를 지움
    print("-1")  # -1 출력

elif counter ==0:   # X 덩어리의 길이가 모두 짝수라면
    for i in range(0,len(board)):
        board[i] = (board[i].count("X")//4) * "AAAA" + (((board[i].count("X")-board[i].count("X")//4*4)) //2) * "BB" # 주어진 규칙대로 문자 변경
        board1 = ''.join(board)  # ''을 기준으로 모든 X덩어리를 붙여 하나의 문자열로 만듦
       

        board2=list(board1)  # 다시 한문자씩 리스트로 만듦
     

        for k in range(0,len(dot)):  # 원래 위치에 .을 insert 함
            
            board2.insert(dot[k],".")
    print(''.join(board2))


'python > Algorithm' 카테고리의 다른 글

[백준]1302 베스트셀러  (0) 2022.01.08
[백준]1158 요세푸스 문제  (0) 2022.01.08
[코드업] [기초-리스트] 성실한 개미  (0) 2022.01.06
[백준]11170 0의 개수  (0) 2022.01.06
[백준]10972 다음순열  (0) 2022.01.05
Comments