선별 리콜

펭가루·2021년 9월 23일
0

내가 만든 문제들

목록 보기
15/17

연휴가 끝난 프로토스 종족의 아이어 전사들은 오늘부터 다시 일상으로 돌아가 출근을 한다. 최근들어 미네랄 수급이 원할하지 않아 셔틀 생산에 차질이 생겼고, 아이어 전사들의 출근 시간이 길어졌다. 이에 따라 프로토스 대의회는 아비터의 리콜을 통해 아이어 전사들의 출근을 돕기로 결정한다. 그런데 아직 리콜 프로토콜이 완벽하게 구현되지는 않은 상태이기 때문에 한 번에 한 종류의 전사 무리만 리콜이 가능하다.

아이어 전사들은 가로 M, 세로 N의 배열을 유지하며 리콜을 대기중이다. 대기중인 아이어 전사의 종류는 프로브, 질럿, 드라군, 하이템플러, 다크템플러, 아칸, 다크아칸, 리버로 총 8종류이다. 이들은 종류별로 크기가 동일하며, 모두 한 칸을 차지한다. 리콜은 직사각형 영역에 대해서 발생하며, 리콜 영역의 좌상단, 우하단의 좌표가 제공된다. 또한 리콜 영역 내에 가장 많이 대기 중인 전사만 리콜이 가능하다. 예를 들어, 리콜 영역내에 프로브가 10마리, 질럿이 8마리, 드라군이 12마리 있다면 이번 리콜을 통해서는 드라군만 리콜이 된다. 리콜을 통해 이동한 전사의 위치에는 다시 같은 종류의 전사가 소환된다.

그런데, 아이어 전사들의 출근을 방해하기 위하여 저그 무리가 때때로 공습을 한다. 이번에는 뮤탈리스크 무리가 공격 예정이며, 뮤탈리스크는 한 번 공격에 전사 한 마리를 공격한다. 공격 당한 전사는 그 자리에서 사라지며, 그 자리는 계속 비어 있는 채로 유지된다.

입력으로 N, M (N, M은 최대 1000이하의 자연수)과 아이어 전사의 초기 위치를 담은 2차원 배열 A가 주어진다. A에는 0에서 7까지의 정수가 들어 있으며, 0~7은 각각 순서대로 프로브, 질럿, 드라군, 하이템플러, 다크템플러, 아칸, 다크아칸, 리버를 의미한다. 그 후 입력으로 L줄에 걸쳐서 (L은 최대 100,000 이하의 자연수) 5개의 정수 k, x, y, z, w, 또는 3개의 정수 k, x, y가 주어진다. k가 1일 경우 리콜을 의미하며, 좌상단이 (x, y), 우하단이 (z, w)인 영역에 대해 리콜을 진행한다는 의미이다. k가 2일 경우 뮤탈리스크의 공격을 의미하며, (x, y)에 위치한 아이어 전사에게 공격을 한다는 의미이다. 매번 리콜이 진행될 때마다 어떤 전사가 리콜 됐는지 출력하시오. 리콜 가능한 전사가 두 종류 이상일 경우, 0에 가까운 전사를 리콜한다(제한시간 1초).

profile
취미로 알고리즘 문제 만드는 사람

0개의 댓글

관련 채용 정보