본문 바로가기
📍Certificate/Engineer Information Processing

[정보처리기사] 실기 프로그래밍언어 3문제 (6)

by Sun A 2024. 8. 14.

1️⃣ [JAVA]

2022.2회

문제


  
public class Conv {
public Conv(int a) {
this.a = a;
}
int func() {
int b = 1;
for (int i = 1; i < a; i++) {
b = a * i + b;
}
return a + b;
}
int a;
}
public static void main(String[] args){
Conv obj = new Conv(3);
obj.a = 5;
int b = obj.func();
System.out.print(obj.a + b);
}
61

Conv라는 클래스에 aoroqustn 'a'를 멤버 변수 'a'에 할당한다.

 

func() 메서드로 b를 1로 초기화하고 a가 1보다 큰경우 'for' 루프가 실행된다.

루프에서 b의 값은 반복적으로 갱신되며 루프가 끝난 후, 최종적으로 a+b를 반환한다.

 

main에서 Conv객체 obj가 'a=3' 으로 초기화된다.

하지만 다음번에 다시 5로 변경된다.

아래는 그 값대로 계산한 결과이다.

i b
1 6
2 16
3 31
4 51

b의 값은 51이고 a의 값은 5이다.

return 값이 a + b인데 이 값의 결과가 func이기 때문에 b에는 56이 출력된다.

최종 결과값은 obj.a + b이기 때문에 5 + 56 = 61이다.

 

2️⃣ [JAVA]

2023.3회

다음 Java 코드에 대한 알맞는 출력값을 작성하시오.


  
class Parent {
int compute(int num) {
if(num <= 1)
return num;
return compute(num-1) + compute(num-2);
}
}
class Child extends Parent {
int compute(int num) {
if(num <= 1)
return num;
return compute(num-1) + compute(num-3);
}
}
public class main {
public static void main(String args[]) {
Parent obj = new Child();
System.out.print(obj.compute(7));
}
}
2

우선 실행되는 코드에 대해 확인해보면 Parent obj에 Child 인스턴스를 생성했다.

그리고 출력하는 값은 obj.compute 의 7 값이기 때문에 Child class를 읽어본다.

우선 num 값에 7을 넣었을 때 7은 1보다 크기 때문에 compute(6) + compute(4)를 계산해야 한다.

여기서 아래로 6과 4를 각각 계산해나가면 된다.

compute(6) compute(5) + compute(3)
compute(5) compute(4) + compute(2)
compute(4) compute(3) + compute(1)
compute(3) compute(2) + compute(0)
compute(2) compute(1) + compute(-1)
compute(1) 1

 

compute(6) + compute(4) =

= (compute(5) + compute(3)) + (compute(3) + compute(1))

= (compute(4) + compute(2) + compute(2) + compute(0)) + (compute(2) + compute(0) + 1)

= ((compute(3) + compute(1)) + (compute(1) + compute(-1) + (compute(1) + compute(-1) +  0) + ( (compute(1) + compute(-1) +  0 + 1)

= (compute(2) + compute(0) + 1 + 1 -1 + 1 -1 + 0 1 -1 + 0 + 1

= compute(1) + compute(-1) + 2

= 2

 

3️⃣ [JAVA]

2021.1회

다음은 Java 프로그램이다. 실행 결과를 쓰시오.


  
public class good {
public static void main(String[] args){
int i, j;
for(j=0, i=0; i<=5; i++){
j+=i;
System.out.print(i);
if(i==5){
System.out.print("=");
System.out.print(j);
}else{
System.out.print("+");
}
}
}
}

 

0 + 1 + 2 + 3 + 4 + 5 = 15

i 와 j 를 생성한다.

반복문의 의미는 j와 i가 0인 상태로 시작하되 매반복문이 실현될때마다 i는 1씩 추가된다.

i가 5를 초과하면 반복문이 끝난다.

 

j의 값은 i의 값만큼 더하진다. 

i j print값
0 0 0 +
1 1 0 + 1 + 
2 3 0 + 1 + 2 +
3 6 0 + 1 + 2 + 3 +
4 10  0 + 1 + 2 + 3 + 4 +
5 15 0 + 1 + 2 + 3 + 4 + 5 = 15