백준 1343번 - 폴리오미노

Gyuhan Park·2021년 11월 25일
0

코딩테스트 정복

목록 보기
31/47

AAAA와 BB, 폴리오미노 2개를 무한개만큼 가지고 있다. '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.

# 틀린 코드

틀린 코드라고 적지만 아직도 난 논리상 오점을 찾지 못했다. XXXX를 AAAA로, XX를 BB로 바꾸는 문제다. X의 개수를 센 후 X의 개수에 맞는 액션을 취했다. 사전순서대로 만들기 위해 AAAA를 우선적으로 치환하였다. X가 많이 나온 경우 나누어떨어지면 치환하는 방법을 택했다. 시간초과도 아니고 30%에서 틀렸습니다가 뜨니까 이해가 안된다. 어떤 부분을 놓친걸까?

import sys
board = sys.stdin.readline()
count = 0

for i in range(len(board)):
  if board[i] == "X":
    count += 1

  elif board[i] == "." or i == len(board)-1:
    if count >= 6:
      count_four = count // 4
      count = count % 4
      count_two = count // 2
      count = count % 2
      if count == 0:
        if count_four:
          board = board.replace("X", "A", count_four*4)
        if count_two:
          board = board.replace("X", "B", count_two*2)  
        count = 0

    if count > 0 and count % 4 == 0:
      board = board.replace("X", "A", 4)
      count = 0
    elif count > 0 and count % 2 == 0:
      board = board.replace("X", "B", 2)
      count = 0

if count:
  print(-1)
else:
  print(board.strip())

# 정답 코드

아니.....이거라고...? replace()를 테스트할 때 앞의 것만 바뀌는 게 아니라 전체가 바뀌길래 하나씩 세야되는걸로 생각했는데 앞에 AAAA를 먼저 치환해버리면 XX가 존재하는 경우와 존재하지 않은 경우가 자동으로 나뉜다. 하 그러네 그냥 4개를 먼저바꿔버리면 남는걸로 판단하면 되네 나누어떨어질 때까지 나눌필요가 없었네...........호호

board = input() 
board = board.replace("XXXX", "AAAA") 
board = board.replace("XX", "BB") 
if 'X' in board: 
  print(-1) 
else: 
  print(board)
profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글