728x90
반응형
2020년 4회 정보처리기사 실기 기출문제
문제
다음은 Java로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.
class Parent {
public int compute(int num) {
if (num <= 1) return num;
return compute(num - 1) + compute(num - 2);
}
}
class Child extends Parent {
public int compute(int num) {
if (num <= 1) return num;
return compute(num - 1) + compute(num - 3);
}
}
class Good {
public static void main(String[] args) {
Parent obj = new Child();
System.out.print(obj.compute(4));
}
}
정답
1
반응형
해설
1️⃣ 상속과 오버라이딩
📌 상속 (Inheritance)
- Child 클래스는 Parent 클래스를 상속받습니다.
- 상속받은 Child 클래스는 Parent 클래스의 메서드 compute를 재정의(오버라이딩)합니다.
📌 오버라이딩 (Overriding)
- 오버라이딩이란 부모 클래스의 메서드를 자식 클래스에서 동일한 이름과 매개변수로 재정의하는 것입니다.
- Parent 클래스의 compute 메서드는 다음과 같습니다:
public int compute(int num) {
if (num <= 1) return num;
return compute(num - 1) + compute(num - 2);
}
- Child 클래스는 이를 오버라이딩하여 다음과 같이 수정했습니다:
public int compute(int num) {
if (num <= 1) return num;
return compute(num - 1) + compute(num - 3);
}
2️⃣ 재귀 함수
재귀 함수란 자신을 호출하는 함수입니다. 이 문제에서 compute는 조건에 따라 자기 자신을 호출하는 형태로 구현되었습니다.
3️⃣ 실행 흐름 분석
Parent obj = new Child();
- 부모 클래스 타입 Parent의 참조 변수 obj가 Child 클래스의 객체를 가리킵니다.
- 하지만 실제로 실행되는 메서드는 Child 클래스의 compute 메서드입니다.
→ 다형성(Polymorphism)에 의해 오버라이딩된 메서드가 호출됩니다.
obj.compute(4)
- obj.compute(4)를 호출하면, Child 클래스의 compute 메서드가 동작합니다.
728x90
4️⃣ Child 클래스의 compute(4) 실행 과정
public int compute(int num) {
if (num <= 1) return num;
return compute(num - 1) + compute(num - 3);
}
Child 클래스의 compute 메서드는 다음과 같이 동작합니다
- compute(4)
- 조건 num <= 1은 거짓입니다.
- 따라서 compute(4-1) + compute(4-3) → compute(3) + compute(1)
- compute(3)
- 조건 num <= 1은 거짓입니다.
- 따라서 compute(3-1) + compute(3-3) → compute(2) + compute(0)
- compute(2)
- 조건 num <= 1은 거짓입니다.
- 따라서 compute(2-1) + compute(2-3) → compute(1) + compute(-1)
- compute(1)
- 조건 num <= 1이 참입니다.
- 1을 반환합니다.
- compute(0)
- 조건 num <= 1이 참입니다.
- 0을 반환합니다.
- compute(-1)
- 조건 num <= 1이 참입니다.
- -1을 반환합니다.
5️⃣ 결과 값 정리
이제 각 단계의 결과를 정리하면 다음과 같습니다:
- compute(4) → compute(3) + compute(1)
- compute(3) → compute(2) + compute(0)
- compute(2) → compute(1) + compute(-1)
- compute(1) → 1
- compute(-1) → -1
- 따라서 compute(2) → 1 + (-1) = 0
- compute(2) → compute(1) + compute(-1)
- compute(0) → 0
- 따라서 compute(3) → 0 + 0 = 0
- compute(3) → compute(2) + compute(0)
- compute(1) → 1
6️⃣ 최종 결과
compute(4) → compute(3) + compute(1) → 0 + 1 = 1
출력 결과 : 1
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사] [ Python ] 리스트와 문자열의 인덱스 활용 | 2021년 1회 정보처리기사 실기 기출 문제 풀이 (0) | 2024.12.17 |
---|---|
[정보처리기사] WHERE절에서 AND와 OR | SQL 문제 | 2021년 1회 정보처리기사 실기 기출 문제 풀이 (0) | 2024.12.17 |
[정보처리기사] [ Python ] 2차원 리스트 출력 문제 | 정보처리기사 실기 기출 문제 풀이 (0) | 2024.12.17 |
[정보처리기사] [ Java ] 반복문을 활용한 2차원 배열 생성 | 정보처리기사 실기 기출 문제 풀이 (0) | 2024.12.16 |
[정보처리기사] [ C ] 포인터와 배열 | 2020년 3회 정보처리기사 실기 기출문제 (0) | 2024.12.10 |