본문 바로가기
CodeSignal

File Naming

by Doromi 2024. 1. 13.
728x90
반응형

주어진 배열 names는 파일명을 나타내며, 파일이 생성된 순서대로 정렬되어 있습니다. 배열의 각 요소 names[i]는 names[i-1] 이전에, 그리고 names[i+1] 이후에 생성된 파일을 나타냅니다 (0부터 시작하는 인덱스로 가정). 모든 파일은 고유한 이름을 가져야 하므로, 이전에 생성된 파일과 동일한 이름을 가진 나중에 생성된 파일은 해당 이름에 추가적인 (k) 접미사를 가져야 합니다. 여기서 k는 이전 파일 이름에서 등장하지 않는 가장 작은 양의 정수이며, 1부터 시작합니다.

주어진 작업은 names의 각 요소를 순회하면서 위의 조건에 따라 모든 파일 이름을 업데이트하고, 올바른 파일 이름의 배열을 반환하는 것입니다.

예를 들어, names = ["doc", "doc", "image", "doc(1)", "doc"]인 경우, 출력은 ["doc", "doc(1)", "image", "doc(1)(1)", "doc(2)"]가 됩니다.

string[] solution(string[] names) {
    Dictionary<string,int> fileCounts = new Dictionary<string, int>();
    
    for(int i = 0;i<names.Length;i++){
        if(fileCounts.ContainsKey(names[i])){
            int count = fileCounts[names[i]]+1;
            string newName = $"{names[i]}({count})";
            while(fileCounts.ContainsKey(newName)){
                count++;
                newName = $"{names[i]}({count})";
            }
            
            fileCounts[names[i]]=count;
            fileCounts[newName] = 0;
            names[i] = newName;
        }else{
            fileCounts[names[i]] = 0;
        }
    }
    return names;
}
파일 이름과 각 파일 이름의 등장 횟수를 추적하는 Dictionary를 사용하여 배열을 순회하고 파일 이름을 업데이트합니다. 동일한 이름을 가진 파일이 이미 존재하는 경우에는 적절한 (k) 접미사를 추가하여 새로운 이름을 찾습니다. 
728x90
반응형

'CodeSignal' 카테고리의 다른 글

spiralNumbers  (0) 2024.01.17
messageFromBinaryCode  (1) 2024.01.14
Count pairs in array whose sum is divisible by K  (0) 2024.01.10
Different Squares  (0) 2024.01.09
sumUpNumbers  (0) 2024.01.08