이름이라는 n개의 문자열 배열이 있다고 가정합니다. i번째 분에 이름이 [i]인 디렉토리를 생성할 수 있도록 파일 시스템에 n개의 디렉토리를 만들어야 합니다. 두 파일은 같은 이름을 가질 수 없습니다. 중복 디렉토리 이름을 입력하면 시스템은 (k) 형식으로 이름에 접미사를 추가합니다. 여기서 k는 얻은 이름이 고유하게 유지되도록 하는 가장 작은 양의 정수입니다. 길이가 n인 문자열 배열을 찾아야 합니다. 여기서 ans[i]는 생성할 때 i번째 디렉토리에 할당할 실제 이름입니다.
따라서 입력이 이름 =["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]와 같으면 출력은 ['my_dir', 'my_dir(1)'이 됩니다. , 'my_new_dir', 'my_new_dir(1)', 'abc'] "my_new_dir"이 이미 한 번 존재하고 첫 번째 것 다음에 하나(1)가 추가되기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
dic :=새 맵, 일부 키가 없으면 0을 반환
-
res :=새 목록
-
이름의 각 이름에 대해 수행
-
이름이 dic에 없으면
-
딕[이름] :=딕[이름] + 1
-
res의 끝에 이름 삽입
-
-
그렇지 않으면
-
newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'
-
newname이 dic에 있는 동안 do
-
딕[이름] :=딕[이름] + 1
-
newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'
-
-
dic[새 이름] :=1
-
res의 끝에 newname 삽입
-
-
-
반환 해상도
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import defaultdict def solve(names): dic = defaultdict(int) res = [] for name in names: if name not in dic: dic[name] += 1 res.append(name) else: newname = name +'(' + str(dic[name]) + ')' while newname in dic: dic[name] += 1 newname = name +'(' + str(dic[name]) + ')' dic[newname] = 1 res.append(newname) return res names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"] print(solve(names))
입력
["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
출력
['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']