Leetcode Java Find Duplicate File in System
업데이트:
문제
코드
class Solution {
public List<List<String>> findDuplicate(String[] paths) {
Map<String, List<String>> map = new HashMap<>();
for (String path : paths) {
String[] splits = path.split("\\s");
for (int idx = 1; idx < splits.length; idx++) {
String[] filePath = splits[idx].split("\\(");
String content = filePath[1].substring(0, filePath[1].length() - 1);
if (!map.containsKey(content)) {
map.put(content, new ArrayList<>());
}
map.get(content).add(new StringBuilder(splits[0]).append("/").append(filePath[0]).toString());
}
}
List<List<String>> result = new ArrayList<>();
for (List<String> files : map.values()) {
if (files.size() > 1) {
result.add(files);
}
}
return result;
}
}
결과
설명
-
파일 위치가 담긴 paths에서 동일한 내용이 존재하는 파일들을 그룹지어 반환하는 문제이다.
-
동일한 내용이 담긴 파일들을 넣을 map을 정의한다.
- paths의 모든 값들을 반복하여 아래를 수행한다.
- splits에 path를 공백(“ “) 기준으로 문자열을 분리해서 배열로 넣어준다.
- 1부터 splits의 길이 미만까지 idx를 증가시키며 아래를 반복한다.
- filePath에 splits의 idx번째 값에서 소괄화의 시작 문자(“(“) 기준으로 문자열을 분리해서 배열로 넣어준다.
- content에 filePath의 첫 번째인 텍스트 내용의 시작부터 끝까지 넣어준다.
- map에 content가 존재하지 않으면, 신규 ArrayList를 생성하여 넣어준다.
- map의 content에 대한 배열을 가져와 splits[0]인 디렉토리 위치에 filePath[0]인 파일 이름을 구분자(“//”)로 합친 문자열을 넣어준다.
-
결과를 넣을 result를 ArrayList로 초기화 하고, map의 모든 값들을 반복하여 하나라도 값이 존재하는 파일 그룹들을 result에 넣어준다.
- 위의 반복이 완료되면 그룹화하여 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기