098. 미니 Git
Hard
바이브코딩
문제 설명
[문제]
미니 Git MCP 서버를 구현한다. Git처럼 변경 기록(커밋)을 시간 순으로 쌓아 두고, 로그 조회·두 커밋 비교(diff)·특정 커밋으로 이동(checkout)을 지원한다. 여기서는 단순화하여 각 커밋이 메시지 문자열 하나만 갖는다.
서버는 커밋 메시지 목록을 추가된 순서대로 유지한다. 커밋 ID는 0부터 시작해 1씩 자동 증가하는 정수다(첫 커밋 = 0, 두 번째 = 1, ...). 서버 시작 시 목록은 비어 있다.
[구현할 함수]
- commit(message: str) -> int
새 커밋(메시지)을 추가하고, 그 커밋에 부여된 ID를 반환한다. 첫 커밋은 0이다.
- view_view_view_log() -> 문자열 배열
모든 커밋 메시지를 최신순(가장 최근 커밋이 첫 번째)으로 담은 배열을 반환한다. 커밋이 없으면 빈 배열.
- diff(commit1_id: int, commit2_id: int) -> str
두 커밋의 메시지를 "msg1 -> msg2" 형태의 한 문자열로 합쳐 반환한다. 둘 중 하나라도 존재하지 않는 커밋 ID이면 빈 문자열을 반환한다.
- checkout(commit_id: int) -> str
해당 커밋 ID의 메시지를 반환한다. 존재하지 않으면 빈 문자열.
[입력·상태]
메시지는 문자열, 커밋 ID는 정수다. 커밋 목록은 호출 간에 유지된다.
[제약]
- 커밋 ID는 0부터 시작하는 연속 정수이며, 유효 범위를 벗어난 ID는 "존재하지 않음"으로 처리한다.
- diff·checkout은 존재하지 않는 커밋에 대해 예외 대신 빈 문자열을 반환한다.
[예시]
commit("첫 커밋") -> 0
(빈 상태) view_view_log() -> []
(빈 상태) diff(0, 1) -> "" # 둘 다 없음
(빈 상태) checkout(0) -> ""
로그인하고 풀기
AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.