트로미노 알고리즘 문제

 

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

 

14601번: 샤워실 바닥 깔기 (Large)

첫 번째 줄에는 바닥의 한 변의 길이를 표현하는 자연수 K(1 ≤ K ≤ 7) 가 주어진다. 이때 바닥의 크기는 2K 가 됨에 유의하라. 두 번째 줄에는 배수구의 위치를 나타내는 자연수 x, y (1 ≤ x, y ≤ 2K)

www.acmicpc.net

 

내 코드😉

import sys
input = sys.stdin.readline

k = int(input())
x, y = map(int, input().split())

num = 0
length = pow(2, k)
map = [[0] * length for _ in range(length)]
map[x - 1][y - 1] = -1

def checkHole(x, y, len):
  for i in range(x, x + len):
    for j in range(y, y + len):
      if map[i][j] != 0:
        return False

  return True

def tromino(x, y, len):
  num += 1
  halfLen = len // 2
  if (checkHole(x, y, halfLen)):
    map[x + halfLen - 1][y + halfLen - 1] = num
  if (checkHole(x, y + halfLen, halfLen)):
    map[x + halfLen - 1][y + halfLen] = num
  if (checkHole(x + halfLen, y, halfLen)):
    map[x + halfLen][y + halfLen - 1] = num
  if (checkHole(x + halfLen, y + halfLen, halfLen)):
    map[x + halfLen][y + halfLen] = num
  if halfLen == 2:
    return

  tromino(x, y, halfLen)
  tromino(x, y +  halfLen, halfLen)
  tromino(x + halfLen, y, halfLen)
  tromino(x + halfLen, y + halfLen, halfLen)

tromino(0, 0, length)

for i in range(length):
  for j in range(length):
    print(map[i][j], end=' ')
  print()

 

 

 

백준 문제 풀이 깃허브 주소입니다 :)

https://github.com/Yiseull/baekjoon

 

GitHub - Yiseull/baekjoon

Contribute to Yiseull/baekjoon development by creating an account on GitHub.

github.com

+ Recent posts