아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

빙고

시간 제한1초메모리 제한1024 MB

요약
n과 k가 주어질 때, n x n 격자에서 가로, 세로, 대각선 어느 줄도 완성하지 않으면서 정확히 k칸을 채울 수 있는지 판정하고 그 격자를 출력한다.
난이도

보통10점 중 5점

유형
구현, 그리디, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

빙고는 정사각 격자 위에서 하는 게임이다. 각 참가자는 n×nn \times n 격자를 받아 각 칸에 서로 다른 수를 하나씩 적는다. 그다음 진행자가 무작위로 수를 하나 뽑으면, 각 참가자는 자기 격자에서 그 수를 찾고 격자에 그 수가 있으면 해당 칸을 칠한다. 누군가가 한 줄에 칠해진 칸을 nn개 만들 때까지 이 과정을 반복하는데, 이렇게 완성된 줄을 빙고 줄이라고 하자.

가능한 빙고 줄은 2n+22n + 2개다. 가로 nn줄, 세로 nn줄, 대각선 22줄이다.

---  ...  ...  |..  .|.  ..|  \..  ../
...  ---  ...  |..  .|.  ..|  .\.  ./.
...  ...  ---  |..  .|.  ..|  ..\  /..

예를 들어 다음 격자는 빙고 줄이 네 개다. 가로 두 줄, 세로 한 줄, 대각선 한 줄이다.

#..#.
#####
..###
#####
..###

빙고 줄은 언제 만들어질까? 이는 완전히 무작위다. 운이 좋으면 꽤 이른 시점에 줄을 완성할 수도 있고, 반대로 빙고 줄을 하나도 만들지 않고 격자의 대부분을 칠할 수도 있다. 이 문제에서는 빙고 줄을 하나도 만들지 않고 kk개의 칸을 칠하는 불운한 경우를 살펴본다.

두 정수 nn과 kk가 주어질 때, n×nn \times n 격자에서 빙고 줄을 하나도 만들지 않고 정확히 kk개의 칸을 칠할 수 있는지 판별하라. 가능하다면 그 방법을 하나 보여라.

입력

첫 번째 줄이자 유일한 줄에 두 정수 nn과 kk가 주어진다.

출력

n×nn \times n 격자에서 빙고 줄을 하나도 만들지 않고 정확히 kk개의 칸을 칠할 수 있으면 첫 번째 줄에 YES를 출력한다. 그렇지 않으면 NO를 출력한다.

답이 YES이면 다음 줄부터 격자의 각 줄을 출력한다. 각 줄은 nn개의 문자로 이루어진 문자열이다. ii번째 문자는 그 줄의 ii번째 칸이 칠해졌으면 #(ASCII 35), 칠해지지 않았으면 .(ASCII 46)이다. 정확히 kk개의 칸이 칠해져 있어야 하며, 빙고 줄이 있어서는 안 된다.

격자를 채우는 방법이 여러 가지라면 그중 아무거나 하나를 출력한다.

제한

  • 1≤n≤1001 \leq n \leq 100
  • 0≤k≤n20 \leq k \leq n^2

힌트

두 번째 예제는 부분문제 2와 3에서만 유효하다.

예제2

  1. 예제 1

    입력
    4 2
    
    예상 출력
    YES
    ##..
    ....
    ....
    ....
    
  2. 예제 2

    입력
    4 16
    
    예상 출력
    NO