KAITA 실전 코딩 문제: GitHub Packages 를 nested tree 패턴으로 출력하기

문제:

GitHub Packages 는 깃허브에서 제공하는 패키지 저장소이며 컨테이너 (예: 도커), 프로그래밍 패키지 (NPM, Maven, Gradle, Nuget, Gem) 을 저장할수 잇는 공간을 제공합니다. 비슷한 솔루션으로는 JFrog Artifactory, Nexus, DockerHub 등등이 있습니다.

GitHub Packages 의 예

도커 컨테이너 같은 경우는 이름 그리고 버전만 (예: node:1.0, node:latest) 필요하지만 Java 의 Maven 이나 Gradle 혹은 NodeJS 의 NPM 같은 페키지들을 보면 org.junit.test 식으로 그룹 으로 형성되어 있습니다.

이름이 그룹 형식으로 분류 가능한 Maven Package 의 예

이런 패키지들은 패키지 레벨에 따라서 그룹핑 (grouping) 이 가능합니다. 예를 들어 만약 인풋이 아래처럼 각 라인마다 패키지가 있다고 가정합니다.

Maven Package 이름을 나열한 인풋의 예

그러면 아래 보이는 것처럼 트리 (tree) 형태로 관계도가 만들어 질수 있겠죠.

Nested tree 형태로 제구성해서 프린트한 Maven Package

JFrog Artifactory 나 Nexus 같은 패키지 리지스트리 (package registry) 는 이미 이런 뷰를 제공합니다.

JFROG Artifactory 의 nested tree view:

JFROG Artifactory 의 nested tree view:

Maven Nexus 의 nested tree view:

Maven Nexus 의 nested tree view:

하지만 GitHub Packages 는 현재 모든 패키지들을 linear 하게 저장하고 이런 nested 형식의 트리 구조로 저장하는 뷰가 없습니다. 그래서 풀어야 할 문제는 이런 페키지 이름을 linear 된 형식으로 받은 인풋을 받았을때 nested tree 구조로 되어 있는 패키지 형태로 프린트 하는것입니다.

INPUT & OUPUT 예:

각 라인마다 패키지 이름을 나타내는 인풋이 주어지면 nested tree 형식으로 프린트합니다.

예제 1:

Input

Input 1

Output:

Output 1

예제 2:

Input 2:

Input 2

Output 2

Output 2

보너스 문제:

depth 라는 옵션을 패스하면 그 깊이 만큼 프린트 합니다. 만약 depth 숫자가 가능한 깊이 보다 크면 최대 가능한 숫자만큼만 프린트 합니다.

다음과 같은 인풋을 예제로 씁니다.

보너스 인풋 예

보너스 예 1:

depth = 1 로 패스하였을 경우

아웃풋 — 보너스 예 1

보너스 예 2:

depth = 3 로 패스하였을 경우

아웃풋 — 보너스 예 2

보너스 예 3:

depth = 6 로 패스하였을 경우

아웃풋 — 보너스 예 3

--

--

A cloud practitioner talking about technology, travels & career tips. But I will sometimes cover financial advises and some random stuffs.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Bryant Jimin Son

Bryant Jimin Son

A cloud practitioner talking about technology, travels & career tips. But I will sometimes cover financial advises and some random stuffs.