문제 LeetCode - 71. Simplify Path
https://leetcode.com/problems/simplify-path/description/
이 문제는 일단 문제를 읽을 때부터 머라꼬?? 했던 문제
조건이 너무 많아 앙앙...
코어 타임 문제 풀이 시간이 30분인데 문제 이해하다가 30분 다 쓸 것 같은 느낌으로 앙앙 거리고 있으니까 팀원 한 분이 타이머 시작하기 전에 문제 이해 하고 시작하자고 해주셨다 ㅠㅠ
직접 보드에 예시까지 쓰면서 설명해주신 덕분에 문제 완벽 이해하고 30분 동안 풀이를 시작했다

"""
/week1/basic
/week1/basic/.. -> week1
/week1/basic///// -> week1/basic
/week1/basic
"""
잊지 않게 대충 예시 달아두고 문제 풀이 시작
1차 풀이 코드
class Solution:
def simplifyPath(self, path: str) -> str:
path_list = list(path.split('/'))
print(path_list)
simple_path = []
# 경로 첫 시작은 무조건 /
#simple_path.append('/')
# 받아온 경로를 처음부터 끝까지 순회
for i in range(len(path_list)):
# 일단 디렉토리 요소들 다 push 해줌
simple_path.append(path_list[i])
if path_list[i] == "":
continue
# . 은 현재 디렉토리
elif path_list[i] == ".":
# = . pop 해서 디렉토리 현재 이름만 남기기
simple_path.pop()
# ..은 이전 상위 디렉토리
elif path_list[i] == "..":
# 첫번째 pop으로 .. 지우고
simple_path.pop()
# 두번째 pop으로 상위 디렉토리 이름만 남기기
simple_path.pop()
# # i가 마지막 디렉터리가 아니라면
# if not i == len(path_list) - 1:
# # 디렉터리 이름 뒤 슬래시 붙이기
# simple_path.append('/')
# elif
# / 슬래시 여러 개는 어쩌지
simple_path = "/".join(simple_path)
#simple_path = "".join(simple_path)
for c in simple_path:
if simple_path[i] == len(simple_path) - 1:
print(simple_path)
return simple_path
그러나 내가 30분만에 문제를 풀 수 있을리가?
그래도 주석 열심히 달면서 로직 짰어요
보이시나요
# / 슬래시 여러 개는 어쩌지.
잘 기억은 안 나는데 그래도 슬래시 처리만 잘 됐으면 통과될 것 같았다
최종 풀이 코드
class Solution:
def simplifyPath(self, path: str) -> str:
# '/'를 기준으로 문자열 자르기
# 리스트엔 '/'의 자리에 공백이 들어가게 된다
cmd_list = path.split('/')
# 반환할 주소 리스트
simple_path = []
for cmd in cmd_list:
# '/' 대신 들어간 공백, 현재 디렉토리로 취급해야 하는 '.'은 담지 않고 넘어간다
if cmd == "" or cmd == ".":
continue
# 이전 상위 디렉토리로 취급해야 하는 '..'은 pop으로 이전 상위 디렉토리 주소만 남긴다
elif cmd == "..":
if simple_path:
simple_path.pop()
# 그 외 다른 디렉토리 이름 및 문자들은 주소로 반환한다
else:
simple_path.append(cmd)
# 무조건 루트 디렉토리 '/' 문자 포함
## 리스트로 저장했기 때문에 .join 메소드 활용해서 리스트 문자열들을 하나로 합쳐주며 디렉토리 사이 '/'문자를 추가해준다
simple_path = "/" + "/".join(simple_path)
return simple_path
문제 설명해 주신 팀원 분 코드를 참고해서(슬쩍 베껴서,) 해결할 수 있었다... 앙앙
cmd_list = path.split('/')
1차 풀이 때 자꾸 공백이 출력돼서 뭐가 문제인가 했더니...
split('/')를 사용해서 문자열을 자르면 리스트로 저장할 때 슬래시 자리에 공백이 들어간다고!
# 무조건 루트 디렉토리 '/' 문자 포함
## 리스트로 저장했기 때문에 .join 메소드 활용해서 리스트 문자열들을 하나로 합쳐주며 디렉토리 사이 '/'문자를 추가해준다
simple_path = "/" + "/".join(simple_path)
return simple_path
핵심은 여기였다
리스트에 있는 요소들을 하나의 문자열로 붙여주는 .join() 함수
.join() 함수 앞에 "구분자"를 붙여주면 요소들의 사이사이에 구분자를 붙여서 하나의 문자열로 붙여준다고 한다
아직도 파이썬 메소드를 전부 알지 못해서 이런 꿀 정보를 모르고 있었다니...
알았으면 30분 안에 풀었을 듯하다!
'학습 일지 > Coding Test' 카테고리의 다른 글
| [코딩 테스트] LeetCode - 2. Add Two Numbers (0) | 2026.03.23 |
|---|---|
| [코딩 테스트] 스택 - 스택 (백준 실버 4) (0) | 2026.03.23 |
| [코딩 테스트] 해시 테이블 - 민균이의 비밀번호 (백준 브론즈1) (0) | 2026.03.23 |
| [코딩 테스트] 분할정복 - 색종이 만들기 (백준 실버2) (0) | 2026.03.23 |
| [코딩 테스트] 링크드리스트 - 에디터 (백준 실버2) (0) | 2026.03.16 |