Texture Wrapping

면접 대비

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

요약
U×V 텍스처를 평면 왼쪽 위부터 clamp-to-edge, repeat, mirrored-repeat 중 하나로 씌워 N×M 평면의 최종 모습을 출력한다.
난이도

쉬움10점 중 3점

유형
구현, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

세로 길이가 NN, 가로 길이가 MM인 평면에 세로 길이가 UU, 가로 길이가 VV인 텍스처를 씌우려고 한다. 평면의 제일 왼쪽 위 칸에 텍스처의 왼쪽 위 칸이 만나게 해서 씌우려고 한다. 하지만 평면의 가로 또는 세로의 길이가 텍스처의 가로 또는 세로의 길이보다 길 수 있어 세 가지 방법 중 하나를 사용해서 평면을 다 씌울 수 있도록 하려고 한다.

세 가지의 방법은 다음과 같다.

1. clamp-to-edge

텍스처의 모서리를 늘려 빈 공간을 채우는 방식이다. 평면의 어떤 칸의 행 좌표가 텍스처의 세로 길이 이상이면 텍스처의 맨 아래 행에서 평면 칸과 동일한 열 좌표에 있는 칸을 해당 평면 칸에 씌운다. 열 좌표가 텍스처의 가로 길이 이상이면 텍스처의 맨 오른쪽 열에서 평면 칸과 동일한 행 좌표에 있는 칸을 해당 평면 칸에 씌운다. 행 좌표와 열 좌표가 각각 텍스처의 세로 길이, 가로 길이 이상이면 텍스처의 맨 아래 오른쪽 칸을 해당 평면 칸에 씌운다.

2. repeat

텍스처를 반복적으로 붙이면서 씌우는 방식이다. 평면을 아래 그림과 같이 세로 길이가 UU, 가로 길이가 VV인 조각으로 쪼갠 후 각 조각의 맨 왼쪽 위 칸이 텍스처의 맨 왼쪽 위 칸이 오도록 텍스처를 씌운다.

3. mirrored-repeat

텍스처를 텍스처 경계면에 대해 거울 반전 시키면서 붙여나가며 씌우는 방식이다. 평면을 아래 그림과 같이 세로 길이가 UU, 가로 길이가 VV인 조각으로 쪼갠 후 각 조각에서 왼쪽 조각을 씌울 때의 텍스처를 좌우반전, 아래쪽 조각을 씌울 때의 텍스처를 상하반전해서 해당 조각의 칸들을 씌운다.

평면의 크기와 텍스처, 그리고 사용할 방법이 주어질 때 평면의 최종 모습을 출력하자.

입력

첫 번째 줄에 평면의 크기 NN과 MM이 공백으로 구분되어 주어진다. (1≤N≤200;1≤M≤200)(1 \leq N \leq 200; 1 \leq M \leq 200)

두 번째 줄에 텍스처의 크기 UU와 VV가 공백으로 구분되어 주어진다. (1≤U≤200;1≤V≤200)(1 \leq U \leq 200; 1 \leq V \leq 200)

세 번째 줄부터 UU개의 줄에 걸쳐 텍스처의 정보가 주어진다. 텍스쳐의 각 줄은 알파벳 대소문자 또는 숫자로 구성된 길이가 VV인 문자열이다

U+3U+3번째 줄에 텍스처를 씌울 방법이 주어진다. clamp-to-edge, repeat, mirrored-repeat 중 하나로 주어진다.

출력

텍스처를 씌운 평면의 최종 모습을 출력한다.

예제3

  1. 예제 1

    입력
    7 7
    3 3
    123
    456
    789
    clamp-to-edge
    
    예상 출력
    1233333
    4566666
    7899999
    7899999
    7899999
    7899999
    7899999
    
  2. 예제 2

    입력
    7 7
    3 3
    123
    456
    789
    repeat
    
    예상 출력
    1231231
    4564564
    7897897
    1231231
    4564564
    7897897
    1231231
    
  3. 예제 3

    입력
    7 7
    3 3
    123
    456
    789
    mirrored-repeat
    
    예상 출력
    1233211
    4566544
    7899877
    7899877
    4566544
    1233211
    1233211