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

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

미네랄 2

면접 대비

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

요약
막대를 왼쪽과 오른쪽에서 번갈아 던져 처음 맞는 광물을 부수고, 공중에 뜬 덩어리는 다른 덩어리나 바닥에 닿을 때까지 그대로 떨어진다.
난이도

보통10점 중 6점

유형
시뮬레이션, 그래프, BFS, 구현
정답자
아직 제출이 없습니다

문제

창영과 상근은 한 동굴의 소유권을 두고 다투고 있다. 두 사람은 막대기를 서로에게 던지는 방법으로 동굴의 임자를 가리기로 했다. 싸움은 동굴에서 벌어지며, 동굴에 저장된 미네랄은 던진 막대기에 부서질 수 있다.

동굴은 R행 C열, R×C개의 칸으로 나타낼 수 있다. 각 칸은 비어 있거나 미네랄을 포함한다. 네 방향 중 하나로 인접한, 미네랄을 포함한 두 칸은 같은 클러스터이다.

창영은 동굴의 왼쪽에, 상근은 오른쪽에 서 있다. 두 사람은 번갈아 가며 막대기를 던진다. 막대기를 던지기 전에 던질 높이를 정해야 한다. 막대는 땅과 수평을 이루며 날아간다.

막대가 날아가다 미네랄을 만나면 그 칸의 미네랄은 모두 파괴되고, 막대는 그 자리에서 멈춘다.

미네랄이 파괴된 뒤 남은 클러스터가 분리될 수 있다. 새로 생긴 클러스터가 공중에 떠 있으면 중력에 의해 바닥으로 떨어진다. 떨어지는 동안 클러스터의 모양은 변하지 않는다. 클러스터는 다른 클러스터나 땅에 닿을 때까지 계속 떨어진다. 클러스터는 다른 클러스터 위에 떨어질 수 있으며, 떨어진 뒤에는 합쳐진다.

동굴에 있는 미네랄의 모양과 두 사람이 던진 막대기의 높이가 주어진다. 모든 막대기를 던진 뒤의 미네랄 모양을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 동굴의 크기 R과 C가 주어진다. (1 ≤ R,C ≤ 100)

다음 R개 줄에는 C개의 문자가 주어지며, '.'는 빈 칸, 'x'는 미네랄을 나타낸다.

다음 줄에는 막대기를 던진 횟수 N이 주어진다. (1 ≤ N ≤ 100)

마지막 줄에는 막대기를 던진 높이가 주어지며, 공백으로 구분되어 있다. 모든 높이는 1과 R 사이이고, 높이 1은 행렬의 가장 바닥, R은 가장 위를 의미한다. 첫 번째 막대기는 왼쪽에서 오른쪽으로 던졌으며, 두 번째는 오른쪽에서 왼쪽으로, 이런 식으로 방향을 번갈아 가며 던진다.

공중에 떠 있는 미네랄 클러스터는 없으며, 두 개 이상의 클러스터가 동시에 떨어지는 경우도 없다.

출력

입력 형식과 같은 형식으로 미네랄 모양을 출력한다.

예제3

  1. 예제 1

    입력
    5 6
    ......
    ..xx..
    ..x...
    ..xx..
    .xxxx.
    1
    3
    
    예상 출력
    ......
    ......
    ..xx..
    ..xx..
    .xxxx.
    
  2. 예제 2

    입력
    8 8
    ........
    ........
    ...x.xx.
    ...xxx..
    ..xxx...
    ..x.xxx.
    ..x...x.
    .xxx..x.
    5
    6 6 4 3 1
    
    예상 출력
    ........
    ........
    ........
    ........
    .....x..
    ..xxxx..
    ..xxx.x.
    ..xxxxx.
    
  3. 예제 3

    입력
    7 6
    ......
    ......
    xx....
    .xx...
    ..xx..
    ...xx.
    ....x.
    2
    6 4
    
    예상 출력
    ......
    ......
    ......
    ......
    ..xx..
    xx.xx.
    .x..x.