생각 정리
무슨 자료구조? -> 딱히 사용 안하는 듯?
무슨 구현?
head, number, tail
어떻게 나누지?
함정은?
주의 점은?

이미지 필기 내용을 확인했고, 순서대로 정리된 로직을 확인해 보았습니다.
당신이 적은 내용을 기준으로 논리 순서와 구현 방향이 적절한지 평가 + 보완해드릴게요.
✍️ 필기 요약: 당신이 적은 로직
- head 부분을 소문자로 변환
- 같은 표현력의 head면…
- number를 오름차순으로 정렬
- 각 자리 head에 관련 수록
- head + number + tail로 head 기준 정렬?
✅ 분석: 순서 및 개념 정리
아주 좋은 흐름입니다. 핵심 순서는 맞고, 약간 더 명확히 다듬으면 구현이 훨씬 쉬워져요.
다음과 같이 정리해드릴게요:
📌 전체 로직 정리 (정확한 논리 순서)
1. 파일명 파싱
- 문자열을 순회하며 head, number, tail 분리
- head: 숫자 나오기 전까지의 문자 (→ 비교 시 소문자로 처리)
- number: 숫자만 최대 5자리 → 정수로 변환
- tail: 사용 안 함 (정렬에 관여하지 않음)
2. 커스텀 객체로 저장
- 원래 문자열(original), 파싱한 head, number, 그리고 인덱스(정렬 안정성용)를 저장
3. 정렬 기준
- 우선순위:
- head.toLowerCase() 기준 사전순
- number 기준 오름차순
- 원래 입력 순서(index) 유지 (안정 정렬)
4. 정렬된 순서대로
original
만 추출하여 리턴
⚠️ 보완해야 할 필기 부분
| 필기 항목 | 보완 설명 |
|---|---|
| 2. “같은 표현력의 head면…” | → 정확히는 head.toLowerCase()가 같다면 number로 비교 |
| 4. “각 자리 head에 관련 수록” | → 이건 의미가 모호함. FileInfo 객체에 파싱 결과 저장한다는 뜻이면 맞음 |
| 5. “head + number + tail을 head 기준 정렬” | → tail은 정렬에 사용 안 함! head → number 순서만 고려해야 함 |
✅ 구현 핵심 요약
// 1. 문자열 파싱
String head = ...;
int number = ...;
// 2. 객체 저장
List<FileInfo> files = new ArrayList<>();
// 3. 정렬
files.sort((a, b) -> {
int c = a.head.toLowerCase().compareTo(b.head.toLowerCase());
if (c != 0) return c;
if (a.number != b.number) return a.number - b.number;
return a.index - b.index;
});
// 4. 결과 추출
for (int i = 0; i < n; i++) {
answer[i] = files.get(i).original;
}
💬 결론
- 당신이 적은 흐름은 거의 맞고, 약간의 표현 정리만 하면 훌륭한 설계입니다.
- 가장 중요한 것은 정렬 기준에서 tail은 무시한다는 점, 그리고 안정 정렬을 위해 원래 인덱스를 기억하는 것입니다.
필기 내용을 마크다운이나 문서로 정리해드릴까요?
아니면 다음 문제(비슷한 정렬/파싱 문제)로 넘어가보고 싶으신가요?

'[코딩테스트]' 카테고리의 다른 글
| 조이스틱 - 프로그래머스(java) (0) | 2025.05.05 |
|---|---|
| 가장 큰 수 -프로그래머스 - java (0) | 2025.05.05 |
| 과일 장수 - 프로그래머스 - java (0) | 2025.05.05 |
| K번째수 - 프로그래머스 (java) (0) | 2025.05.05 |
| 두 개 뽑아서 더하기 (프로그래머스 Lv1) - java (0) | 2025.05.05 |