다음 Java 프로그램의 실행 결과를 쓰시오.
public class Main {
static String uniqueReverse(String value, int index) {
if (index < 0) return "";
char current = value.charAt(index);
String rest = uniqueReverse(value, index - 1);
return rest.indexOf(current) >= 0 ? rest : current + rest;
}
public static void main(String[] args) {
String value = "abacad";
System.out.print(uniqueReverse(value, value.length() - 1));
}
}모범답안
dcba
풀이와 판단 근거
재귀 호출은 index=-1에서 빈 문자열을 반환한 뒤 작은 인덱스부터 복귀한다.
반환값은 index 0에서 `a`, index 1에서 `ba`, index 2에서는 a가 이미 있어 `ba`, index 3에서 `cba`, index 4에서는 다시 a를 건너뛰어 `cba`, index 5에서 `dcba`가 된다.
새 문자가 rest에 없을 때만 current + rest로 앞에 붙이는 순서이므로 중복을 제거한 최종 출력은 `dcba`다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 dcba와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.