폴더 정리 (large)
시간 제한1.5초메모리 제한1024 MB
폴더 트리에서 이름이 같은 항목은 합쳐지거나 덮어써지도록 하위 트리를 이동한 뒤, 각 폴더 아래의 서로 다른 파일 이름 개수와 전체 파일 개수를 답한다.
문제
이름이 main인 폴더 안에 여러 가지 파일과 폴더가 있다.
main
├─ FolderA
│ ├─ File1
│ └─ File2
└─ FolderB
├─ FolderC
│ ├─ File4
│ └─ File5
├─ File1
└─ File3
위 구조는 main 폴더의 하위 구조를 계층적으로 표시한 것이다. FolderA, FolderB, FolderC는 폴더이고 File1, File2, File3은 파일이다. 파일 이름이 같으면 내용이 완전히 동일한 파일이다.
한 폴더 안에 같은 이름을 가진 파일이 두 개 이상 존재할 수 없다.
main 폴더의 하위 디렉토리에 같은 이름의 폴더가 두 개 이상 존재할 수 없다.
폴더 또는 파일을 옮겨 main 폴더를 정리하려고 한다.
예를 들어, FolderB 폴더 하위에 있는 두 파일 File1, File3과 폴더 FolderC를 FolderA 폴더 하위로 옮기려고 한다.
File1 파일은 FolderA 폴더 안에 동일한 파일이 이미 존재하므로 덮어쓴다. File3은 동일한 파일이 없으므로 그대로 옮긴다. FolderC 폴더도 동일한 폴더가 없으므로 FolderA 폴더 하위로 옮긴다. FolderB 폴더 하위에 있는 폴더와 파일을 모두 옮겼으므로 FolderB는 삭제한다.
아래는 FolderB 폴더를 FolderA 폴더 안으로 옮긴 후 main 폴더의 하위 구조를 계층적으로 표시한 것이다.
main
└─ FolderA
├─ FolderC
│ ├─ File4
│ └─ File5
├─ File1
├─ File2
└─ File3
이러한 과정으로 폴더를 정리하려고 한다. 폴더 정리 후 쿼리로 파일의 정보를 확인하려고 한다.
입력
첫 번째 줄에는 main 폴더 안에 있는 폴더의 총 개수 과 파일의 총 개수 이 공백으로 구분되어 주어진다.
두 번째 줄부터 번째 줄까지 상위 폴더의 이름 , 폴더 또는 파일의 이름 , 폴더인지 아닌지 알려주는 가 공백으로 구분되어 주어진다.
의 값은 가 폴더라면 1, 파일이라면 0으로 주어진다.
번째 줄에는 옮기는 횟수 가 주어진다.
그다음 줄부터 총 줄에 걸쳐 폴더 경로 와 폴더 경로 가 공백으로 구분되어 주어진다.
옮기는 행위는 입력 순서대로 수행해야 한다.
하위에 있는 파일과 폴더를 하위로 옮기는 것이다. 이때, 는 의 상위 폴더가 아님을 보장한다.
그다음 줄에는 쿼리의 개수 가 주어진다.
그다음 줄부터 개의 쿼리가 주어진다. 쿼리마다 main으로부터 폴더의 경로 정보가 들어온다. 예를 들어 main 폴더 안에 FolderB에 대한 쿼리가 들어온다면, FolderB의 경로인 main/FolderB로 주어진다. 반드시 폴더가 존재하는 경로로 주어짐을 보장한다.
출력
쿼리 순서대로 한 줄씩 폴더 하위에 있는 파일의 종류의 개수와 파일의 총 개수를 출력한다.
파일의 종류의 개수는 같은 파일이 여러 개 있을 경우 하나로 계산한다. 파일의 총 개수는 같은 파일이 있더라도 하나로 계산하지 않는다.
예를 들어, 이름이 File1인 파일이 5개 있을 경우 파일의 종류는 1가지이고 파일의 총 개수는 5개이다.
제한
- 와 는 영어 알파벳 대소문자, 숫자로만 이루어져 있다.