Logo
(追記) (追記ここまで)

33563번 - shapey 스페셜 저지

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB246614420.370%

문제

이 문제는 shapez와 만들어야 하는 도형의 조건만 다른 하위 문제이고, shapez의 정답 코드를 제출해 이 문제를 맞힐 수 있다.

shapey는 각 사분면에 원형, 사각형, 풍차, 별 모양이 배치된 도형들을 자르고, 합치고, 색칠하여 복잡하고 다채로운 도형들을 만들어내는 것이 목표인 게임이다.

주어진 도형들을 조작해 최종적으로 만들어야 하는 도형을 만드는 프로그램을 작성해 보자.

shapey에서는 도형을 쉽게 나타내기 위해 도형 코드를 사용한다. 다음은 도형 코드에 대한 설명이다.

  • 기본 도형
    • 기본 도형은 총 네 가지로 종류와 코드는 다음과 같다.
      • 원형(, Circle): C
      • 사각형(, Rectangle): R
      • 풍차(, Windmill): W
      • 별(, Star): S
  • 색상
    • 색상은 총 여덟 가지로 종류와 코드는 다음과 같다.
      • 빨강(, Red): r
      • 초록(, Green): g
      • 파랑(, Blue): b
      • 노랑(, Yellow): y
      • 보라(, Purple): p
      • 시안(, Cyan): c
      • 색칠되지 않음(, Uncolored): u
      • 하양(, White): w
  • 도형
    • 기본 도형과 색상을 조합하여 하나의 완전한 도형을 만들 수 있다.
    • 도형 한 층은 북동쪽, 남동쪽, 남서쪽, 북서쪽 사분면으로 나뉜다.
    • 한 사분면에는 하나의 기본 도형이 존재하거나 비어 있을 수 있다.
    • 하나의 기본 도형은 하나의 색상을 가진다.
    • 이런 층들을 최소 1층부터 최대 4층까지 쌓아 한 도형을 만들 수 있다.
    • 최고층 이하에 모든 사분면이 비어 있는 층이 있는 도형은 올바르지 않은 도형이다.
    • 그림에서 높은 층의 도형은 아래층보다 작게 보인다. 도형의 크기는 그림에만 나타나며 문제 풀이와 관련이 없다.
  • 도형 코드
    • 기본 도형과 색상의 코드를 조합하여 도형을 코드로 나타낼 수 있다.
    • 도형 한 층의 코드는 '(기본 도형)(색상)(기본 도형)(색상)(기본 도형)(색상)(기본 도형)(색상)'의 형식으로 나타낼 수 있다. 이때 (기본 도형)(색상) 쌍은 순서대로 북동쪽, 남동쪽, 남서쪽, 북서쪽 사분면의 정보를 나타낸다.
    • 비어 있는 사분면의 코드는 '--'으로 나타낸다.
    • 1층부터 가장 높은 층까지 각 층의 코드를 ':'로 구분하여 나타낸다.
    • 다음은 문제 상단에 있는 도형들의 코드 예시이다.
도형 도형 코드
CuCuCuCu
SrSrSrSr:CyCyCyCy
CcSyCcSy:SyCcSyCc:CcSyCcSy
CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy

도형을 조작하는 여러 가지 기계로 더욱 복잡한 도형을 만들 수 있다. 다음은 도형 조작을 위한 기계들에 대한 설명이다.

  • 절단기
    • 한 도형을 서쪽 절반과 동쪽 절반으로 나눈다.
    • 절단 후 어떤 층이 완전히 빈 경우, 즉 '--------'이 되는 경우에는 그 층이 사라지고 그 층보다 높은 층들을 한 층씩 내린다.
    • 절단 후 모든 층이 완전히 빈 경우, 아무런 도형도 생성되지 않는다.
  • 회전기
    • 한 도형을 정해진 각도(90도, 180도, 270도)만큼 시계방향으로 회전시킨다.
  • 결합기
    • 두 도형을 하나의 도형으로 결합한다.
    • 즉, 두 번째로 입력된 도형을 첫 번째로 입력된 도형의 위에서부터, 두 도형에 포함된 기본 도형이 서로 겹쳐 더이상 내리지 못하거나 가장 낮은 층이 1층에 도달할 때까지 내린 후 한 도형으로 합친다.
    • 결합 후 도형이 4층을 초과할 경우, 초과한 층은 사라진다.
  • 색칠기
    • 한 도형의 비어 있지 않은 모든 층, 모든 사분면에 색을 칠한다.
    • 기존에 있던 색은 모두 새로운 색으로 덮어씌워진다.
    • '색칠되지 않음'으로는 색칠할 수 없다.

다음은 기계의 작동 예시이다.

절단기
입력 서쪽 절반 출력 동쪽 절반 출력
CrRwWu-- ----Wu-- CrRw----
CuCu----:--RuRu--:Wu------ ----Ru-- CuCu----:--Ru----:Wu------
--Rc----:Sw------ 생성되지 않음 --Rc----:Sw------
회전기
입력 회전 각도 출력
CrRwWu-- 90도 --CrRwWu
CuCu----:--RuRu--:Wu------ 180도 ----CuCu:Ru----Ru:----Wu--
CuCu----:--RuRu--:Wu------ 270도 Cu----Cu:RuRu----:------Wu
결합기
첫 번째 입력 두 번째 입력 출력
CuCu---- ----RuRu CuCuRuRu
CuCu---- --RuRu-- CuCu----:--RuRu--
Ru----Ru:Ru----Ru:RuRuRuRu --CuCu--:--CuCu-- Ru----Ru:Ru----Ru:RuRuRuRu:--CuCu--
RuRuRuRu:RuRuRuRu:RuRu----:RuRu---- ----CuCu:CuCuCuCu:CuCuCuCu RuRuRuRu:RuRuRuRu:RuRu----:RuRuCuCu
색칠기
입력 색상 출력
CrRwWu-- c CcRcWc--
CuCw----:--RyRg--:Wb------ b CbCb----:--RbRb--:Wb------

도형 조작을 위해 레지스터를 사용한다. 다음은 레지스터에 대한 설명이다.

  • 도형 조작을 위해 100ドル$개의 레지스터를 사용할 수 있다.
  • 레지스터에는 순서대로 $R_1,ドル $R_2,ドル $\cdots,ドル $R_{100}$으로 이름이 매겨져 있다.
  • 처음 주어지는 $N$개의 도형은 $R_1,ドル $R_2,ドル $\cdots,ドル $R_N$에 저장되어 있다.
  • 나머지 100ドル−N$개의 레지스터에는 None이 저장되어 있다.
  • 레지스터에 저장된 값은 다른 값이 저장되지 않는 이상 유지된다.

입력

첫 번째 줄에 주어지는 도형의 개수 $N$(1ドル \le N \le 10$)이 주어진다.

다음 $N$개의 줄에 처음 주어지는 도형의 코드가 순서대로 주어진다. 주어지는 도형들은 모두 1층만 있다.

다음 줄에 만들어야 하는 도형의 코드가 주어진다. 만들어야 하는 도형은 4층까지 있을 수 있다. 1층과 2층, 2층과 3층, 3층과 4층을 인접하다고 할 때, 최고 층 이하의 인접한 두 층의 적어도 한 사분면은 두 층 모두 기본 도형이 존재한다.

올바른 도형 코드만 입력으로 주어진다.

출력

첫째 줄에 사용할 조작의 개수 $M$(1ドル \le M \le 10,000円$)을 출력한다. 다음 $M$개의 줄에 적용할 조작을 다음과 같은 형식으로 순서대로 한 줄에 하나씩 출력한다. 모든 레지스터 번호는 1ドル$ 이상 100ドル$ 이하의 정수여야 한다.

  • 1ドル$ $i$ $j$ $k$ $(j \neq k)$
    • $R_i$에 저장된 도형을 절단기에 넣어 서쪽 절반을 $R_j$에, 동쪽 절반을 $R_k$에 저장한다.
    • $R_i$에 저장된 값이 None일 경우 $R_j,ドル $R_k$에 저장되는 값도 None이다.
    • 어느 쪽 절반에서 도형이 생성되지 않을 경우 그 절반에 해당하는 레지스터에 저장되는 값도 None이다.
  • 2ドル$ $i$ $j$ $k$ ($k \in$ {1ドル,ドル 2ドル,ドル 3ドル$})
    • $R_i$에 저장된 도형을 $k \times 90$도 회전기에 넣어 생성되는 도형을 $R_j$에 저장한다.
    • $R_i$에 저장된 값이 None일 경우 $R_j$에 저장되는 값도 None이다.
  • 3ドル$ $i$ $j$ $k$
    • $R_i,ドル $R_j$에 저장된 도형을 순서대로 결합기에 넣어 생성되는 도형을 $R_k$에 저장한다.
    • $R_i,ドル $R_j$에 저장된 값 중에 None이 있을 경우 $R_k$에 저장되는 값도 None이다.
  • 4ドル$ $i$ $j$ $k$ ($k \in$ {'r', 'g', 'b', 'y', 'p', 'c', 'w'})
    • $R_i$에 저장된 도형을 색칠기에 넣어 색상 $k$로 칠해서 $R_j$에 저장한다.
    • $R_i$에 저장된 값이 None일 경우 $R_j$에 저장되는 값도 None이다.

출력한 조작들을 전부 완료한 후에 $R_{100}$에 만들어야 하는 도형이 저장되어 있어야 한다. 만약 가능한 방법이 여러 가지인 경우 그중 아무거나 출력한다. 주어진 도형들을 조작하여 만들어야 하는 도형을 만들 수 없는 경우 -1을 출력한다.

제한

예제 입력 1

1
CuRuWuSu
CuCuCuCu

예제 출력 1

7
1 1 2 3
2 3 4 1
1 4 5 6
2 6 7 3
3 6 7 8
2 8 9 2
3 8 9 100

예제 입력 2

2
CrCgCbCy
RpRcRuRw
SrSrSrSr:CyCyCyCy

예제 출력 2

-1

예제 입력 3

4
--Cr----
Rw------
----Su--
------Ww
CcSyCcSy:SyCcSyCc:CcSyCcSy

예제 출력 3

8
4 1 2 c
4 3 4 y
3 2 4 5
2 5 6 2
3 5 6 7
2 7 8 1
3 8 7 9
3 9 8 100

예제 입력 4

3
CcRcCcRc
Sr--Sw--
CyCyCyCy
CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy

예제 출력 4

5
2 1 4 1
4 4 4 w
3 1 4 100
3 100 2 100
3 100 3 100

힌트

출처

Contest > BOJ User Contest > 유틸컵 > 제2회 유틸컵 🏭🔺번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /