이 두 가지 기능을 제공하는 파일 시스템을 설계해야 한다고 가정해 봅시다 -
- createPath(path, value) - 새 경로를 만들고 가능한 경우 값을 연결하고 True를 반환합니다. 경로가 이미 존재하거나 상위 경로가 존재하지 않으면 False를 반환합니다.
- get(path) - 경로와 관련된 값을 찾거나 경로가 없으면 -1을 반환합니다.
경로 형식은 -(슬래시) / 뒤에 하나 이상의 소문자 영어 문자가 오는 형식의 하나 이상의 연결된 문자열입니다. 예를 들어 /programming 및 /programming/problems는 유효한 경로이고 빈 문자열 및 /는 유효하지 않습니다. 여기서 우리는 이 두 가지 기능을 구현해야 합니다.
따라서 입력으로 파일 시스템을 만든 다음 ['/a', 1]을 사용하여 경로를 만들고 매개변수 ['/a']와 함께 get()을 사용한 후 출력은 1이 됩니다.피>
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 지도 정의
- createPath 메서드는 경로와 값을 사용하며 다음과 같이 작동합니다.
- p :='/'로 분할된 경로 구성 요소 목록
- x :=d
- i 범위 1에서 p – 1까지의 길이
- p[i]가 x에 없으면 false를 반환합니다.
- x :=x[p[i]][1]
- p의 마지막 요소가 x에 있으면 false를 반환합니다.
- x[p의 마지막 요소] :=v와 빈 지도가 있는 목록
- 참을 반환
- get() 메서드가 경로를 사용 중입니다.
- x :=d
- p :='/'로 분할된 경로 구성 요소 목록
- i 범위 1에서 p – 1까지의 길이
- p[i]가 x에 없으면 -1을 반환합니다.
- x :=x[p[i]][1]
- p의 마지막 요소가 x에 있으면 x[p의 마지막 요소][0]을 반환하고, 그렇지 않으면 -1을 반환합니다.
예제(파이썬)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
class FileSystem(object): def __init__(self): self.d = {} def create(self, p, v): p = p.split("/") x = self.d for i in range(1,len(p)-1): if p[i] not in x: return False x = x[p[i]][1] if p[-1] in x: return False x[p[-1]] = [v,{}] return True def get(self, p): x = self.d p = p.split("/") for i in range(1,len(p)-1): if p[i] not in x: return -1 x= x[p[i]][1] if p[-1] in x: return x[p[-1]][0] else: return -1 ob = FileSystem() print(ob.create("/a", 1)) print(ob.get("/a"))
입력
Initialize the object, then call createPath(“/a”, 1) and get(“/a”)
출력
True 1