https://leetcode.com/problems/simplify-path/
Unix 파일 시스템의 절대 경로가 주어질 때 상대 경로로 변경해서 반환하기
. : 현재 폴더
.. : 이전 폴더 (up level)
... : file/directory name
상대 경로
1) /로 시작
2) 두 폴더는 /로 구분됨
3) 끝이 /로 나지 않음
4) period 포함 안함
절대 경로에만 나타나는 케이스들을 분기점으로 두고 케이스에 맞게 동작하도록 작성했다.
public class Solution {
public string SimplifyPath(string path) {
string[] absolutePath = path.Split('/');
Stack<string> canonicalPath = new Stack<string>();
string answer = "";
foreach(string directory in absolutePath)
{
if (directory == "" || directory == ".") continue;
// stack pop (.. operation + 현재 스택에 뭐가 담겨 있을 때)
else if (directory == ".." && canonicalPath.Count > 0) canonicalPath.Pop();
// stack push
else if (directory != "..") canonicalPath.Push(directory);;
}
if (canonicalPath.Count == 0) return "/";
List<string> answerList = canonicalPath.ToList();
answerList.Reverse();
foreach(string directory in answerList) // 최종 결과로 변환
{
answer += "/";
answer += directory;
}
return answer;
}
}