22860번: 폴더 정리 (small)
main 폴더 하위에는 FolderA 폴더 하위에 있는 File1, File2, FolderB 폴더 하위에 있는 File1, File3이 있다. 파일의 종류는 File1, File2, File3 총 3가지이고, 파일의 총 개수는 File1, File2, File1, File3 총 4개이다. mai
www.acmicpc.net
문제
이름이 main 폴더 안에 여러가지 파일과 폴더가 존재한다.
main
├─ FolderA
│ ├─ File1
│ └─ File2
└─ FolderB
├─ FolderC
├─ File1
└─ File3
위 구조는 main 폴더의 하위 구조를 계층적으로 표시한 것이다. FolderA, FolderB, FolderC는 폴더이고 File1, File2, File3은 파일이다. 파일 이름이 같은 경우는 동일한 파일이다.
한 폴더 안에는 같은 이름의 파일이 두 개 이상 존재할 수 없다.
main 하위 디렉토리에 같은 이름의 폴더가 두 개 이상 존재할 수 없다.
폴더 정리를 하기 위해 main 폴더 하위에 있는 파일들을 확인하려고 한다.
주어지는 쿼리에 대해 폴더와 파일의 정보를 알려주는 프로그램을 만들어보자.
입력
첫 번째 줄에는 main 폴더 하위에 있는 폴더의 총 개수 과 파일의 총 개수 이 공백으로 구분되어 주어진다.
두 번째 줄부터 번째까지 상위 폴더의 이름 , 폴더 또는 파일의 이름 , 폴더인지 아닌지 알려주는 가 공백으로 구분되어 주어진다.
가 폴더라면 1, 파일이라면 0으로 주어진다.
의 값은가 주어진다.
번째 줄에는 쿼리의 개수그 다음줄부터 개의 쿼리가 주어진다. 쿼리마다 main부터 폴더의 경로 정보가 들어온다. 예를 들어 main 폴더 안에 FolderB에 대한 쿼리가 들어온다면, FolderB의 경로인 main/FolderB로 주어진다. 반드시 폴더가 존재하는 경로로 주어짐을 보장한다.
출력
쿼리 순서대로 한 줄씩 폴더 하위에 있는 파일의 종류의 개수와 파일의 총 개수를 출력한다.
파일의 종류의 개수는 같은 파일이 여러개 있을 경우 하나로 계산한다. 파일의 총 개수는 같은 파일이 있더라도 하나로 계산하지 않는다.
예를 들어 이름이 File1 파일이 5개가 있을 경우 파일의 종류는 1 가지이고 파일의 총 개수는 5개이다.
코드
from collections import defaultdict, deque
n, m = map(int, input().split())
file_system = defaultdict(list)
for i in range(n+m):
p, f, c = input().split()
file_system[p].append((f, c))
def count_file(query):
folder = deque([query])
file = set()
cnt = 0
while folder:
f = folder.popleft()
for i in file_system[f]:
if i[1] == '0':
cnt += 1
file.add(i[0])
else:
folder.append(i[0])
return [len(file), cnt]
q = int(input())
for i in range(q):
query = input().split('/')
t, cnt = count_file(query[-1])
print(t, cnt)
'문제풀이 > 구현' 카테고리의 다른 글
[Python/파이썬] 백준 17779번 게리맨더링 2 (0) | 2023.06.26 |
---|---|
[Python/파이썬] 백준 17135번 캐슬 디펜스 (0) | 2023.06.25 |
[Python/파이썬] 백준 2877번 4와 7 (1) | 2023.06.09 |
[Python/파이썬] 백준 20164번 홀수 홀릭 호석 (0) | 2023.05.26 |
[Python/파이썬] 백준 20207번 달력 (0) | 2023.05.26 |