{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉문자열〉공통 상위 디렉터리 찾기← 이전다음 →
#013 · 문자열쉬움경로 파싱

공통 상위 디렉터리 찾기

문제

백업 도구는 여러 개의 절대 경로를 한꺼번에 받아, 그 경로들을 모두 포함하는 가장 깊은 상위 디렉터리 하나만 골라 통째로 압축합니다.

경로 문자열 배열 paths가 주어질 때, 모든 경로가 공통으로 가지는 가장 긴 앞부분 경로를 반환하는 solution(paths) 함수를 작성하세요.

비교는 디렉터리 이름 단위로 합니다. 즉 /home/kim과 /home/kimchi는 두 번째 이름이 kim과 kimchi로 서로 다르므로 공통 부분은 /home까지입니다. 공통 부분이 전혀 없으면 루트인 "/"를 반환합니다.

모든 경로가 완전히 같다면 그 경로 자체를 반환합니다.

예시

paths 반환값 설명
["/srv/app/config/db.yml", "/srv/app/config/mail.yml", "/srv/app/logs"] "/srv/app" 세 경로가 공유하는 이름은 srv, app까지
["/home/kim", "/home/kimchi"] "/home" kim과 kimchi는 다른 이름
["/etc/hosts", "/usr/bin"] "/" 첫 이름부터 다름
["/opt/data/2026/report.csv"] "/opt/data/2026/report.csv" 경로가 하나뿐이면 그 경로 전체

제약 조건

  • 1 ≤ paths.length ≤ 200
  • 각 경로는 항상 /로 시작하고, 길이는 1 이상 200 이하입니다
  • 경로를 이루는 이름은 영어 소문자, 숫자, ., _, -로만 이루어져 있습니다
  • 루트 "/"를 제외하면 경로가 /로 끝나는 일은 없고, //처럼 /가 연달아 나오지도 않습니다
  • 반환값도 같은 규칙을 따릅니다 (루트일 때만 "/", 그 외에는 /로 끝나지 않음)

시간 복잡도 목표: O(전체 문자 수)

테스트 케이스

예시 1: 공통 상위는 /srv/app
입력: paths = ["/srv/app/config/db.yml","/srv/app/config/mail.yml","/srv/app/logs"]
출력: "/srv/app"
예시 2: 이름 단위 비교 (kim ≠ kimchi)
입력: paths = ["/home/kim","/home/kimchi"]
출력: "/home"
예시 3: 공통 없음 → 루트
입력: paths = ["/etc/hosts","/usr/bin"]
출력: "/"
예시 4: 경로가 하나뿐
입력: paths = ["/opt/data/2026/report.csv"]
출력: "/opt/data/2026/report.csv"
완전히 같은 경로들
입력: paths = ["/var/log/sys.log","/var/log/sys.log"]
출력: "/var/log/sys.log"
루트가 섞인 경우
입력: paths = ["/","/var/log"]
출력: "/"
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.