PS/백준

[Python] 1343번 폴리오미노

s_omi 2024. 8. 24. 14:19

✏️ 문제

 

문제 파악

이전에 붙인 테이프의 길이가

  1. 다음 위치까지 사용할 수 있는 지 (테이프 개수 추가 x)
  2. 다음 위치까지 테이프 길이가 되지 않아 새로 테이프를 붙여야 하는 지 (테이프 개수 추가 o)

조건을 잘 세워 코드를 짜야하는 문제이다.

 

알고리즘

  • 그리디 알고리즘
  • 구현

 

 

코드

  • 실패한 코드
s = input()
ary = list(map(str, s.split('.')))
x_length = 0

for i in range(len(ary)):
  x_length += len(ary[i]) # X의 전체 개수가 홀수면 -1 출력

for i in range(len(ary)):
  if x_length % 2 != 0:   # X 개수가 홀수면 -1 만 출력이므로 첫 조건문으로 줌
    print(-1)
    break
  else:
    length = len(ary[i])

    while length != 0:
      if length // 4 > 0:
        print('AAAA', end='')
        length -= 4
      elif length // 2 > 0:
        print('BB', end='')
        length -= 2
  if i != len(ary) - 1:   # 계속 맨 끝에 .이 하나 붙어서
    print('.', end='')

 

while이랑 for문을 두 개나 써서 그런지 예제들에 대한 답은 잘 나오지만 시간초과가 떴다.. 

 

어떻게 짜야할 지 모르겠어서 찾아보니 

board = input()

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

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

 

이렇게 좋은 함수가 있다니 ... 역시 아는 게 힘 ㅠㅠ 함수에 대해 더 많이 공부해야겠다 ..

'PS > 백준' 카테고리의 다른 글

[Python] 6550번 부분 문자열  (0) 2024.08.25
[Python] 1449번 수리공 항승  (0) 2024.08.24
[Python] 2468번 안전 영역  (0) 2024.08.21
[Python] 20551번 Sort 마스터 배지훈의 후계자  (0) 2024.08.21
[Python] 5014번 스타트링크  (0) 2024.08.20