본문 바로가기

cs,코딩,알고리즘/알고리즘 공부

백준 - 1343- 폴리오미노 [파이썬]

728x90

1. 문제

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

 

1343번: 폴리오미노

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

www.acmicpc.net

아항..

 

2. 이해 및 풀이

#. 내풀이

처음에는 X와 .을 구분하려고 했다. 그러나 불현듯 떠오른 append 함수

새로운 리스트를 만들어서 AAAA와 길이가 맞는 X의 갯수가 있으면 그만큼 추가해주고 BB와 길이가 같은 X의 갯수가 있으면 그만큼 추가해주고

.이 있으면 그거는 그거대로 각각 추가해주면 된다.

 

이걸 while문으로 감싸줘서 X의 갯수가 2나 4의 배수가 아니면 새로운 리스트에 그만 추가하고 나오게끔

 

그래서 입력받은 문자열의 길이와 새로운 리스트의 길이가 같으면 그대로 출력하고, 다르면 -1을 출력하게끔!!

board = input()

result=[]
i=0
while i<len(board):
    if board[i]==".":
        result.append(".")
        i+=1
    elif board[i:i+4] == "XXXX":
        result.append("AAAA")
        i+=4
    elif board[i:i+2]=="XX":
        result.append("BB")
        i+=2
    else:
        break

result=''.join(result)

if len(board)==len(result):
    print(result)
else:
    print(-1)

while 생각이 안났었다. 새로운 리스트에 추가하는거까지는 생각이 났는데, X의 갯수를 A,B가 커버할 수 없다면?에서 시간이 오래걸렸다.

=>이럴 때에는 while로 묶고 길이로 비교할 것!

 

또 컴파일 에러가 났다. 이번엔 뭐가 문제이려나...

호옥시 싶어서 output 함수가 있었나 싶어서 찾아봣더니 역시 output이 있었다.(창피하네...) 파이썬은 라이브러리의 천국이다.. 맞다

 

 

#. 다른사람풀이

board = input()

board = board.replace("XXXX", "AAAA")
board = board.replace("XX", "BB")

if 'X' in board:
    print(-1)
    
else:
    print(board)

맞다.. 파이썬에는 replace함수도 있었지..

파이썬으로 코테할 거면 라이브러리 속에 있는 함수도 많이 알아놔야겠다.

(참고) XXX는 BB로 바뀌고 남은 X하나로 인해 -1이 된다

 

바위....