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

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

by Sun A 2024. 10. 12.

1️⃣ [JAVA]

2024.2회

다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

interface Number {
	int sum(int[] a, boolean odd);
}

public class Main {
	public static void main(String[] args) {
		int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
		OENumber OE = new OENumber();
		System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
	}
}
class OENumber implements Number {
	public int sum(int[] a, boolean odd) {
		int result = 0;
		for(int i=0; i < a.length; i++) {
			if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
				result += a[i];
		}		
		return result;
	}	
}
25, 20

우선 print를 보면 OE 클래스의 sum(a, true)와 sum(a, false) 값을 구하는 것이다.

odd 는 boolean 값이고 print에 선언되어 있다.

for을 보면 i가 a.length보다 적은 수 까지 반복하는데 a의 인덱스가 다 돌때까지 반복한다고 생각하면 된다.

먼저 odd가 true라고 가정하고 생각해보자

조건문에서 (odd && a[i] % 2 != 0)를 보면 result 값을 더하기 위해서는 odd가 !odd 인 조건은 계산하지 않는다.

||는 or 이기 때문에 하나의 조건만 만족해도 더할 수 있다.

a[i]를 2로 나눈 나머지가 0이 아니라는 것은 홀수라는 의미이다. 그렇다면 odd 값이 true일때는 a가 홀수인 값을 다 더하면 된다.

25

 

반대로 odd가 false일때는 !odd 여야 true 값이 나오기 때문에 a[i]를 2로 나눈 나머지 값이 0이 되는 짝수의 수만 더하면 된다.

20  

 

2️⃣ [C언어]

2024.2회

다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

#include 

void swap() {
	int a = 11;
	int b = 19;
	int t = a;
	a = b;
	b = t;
}

int main() {
	int a = 11;
	int b = 19;
	swap();
	switch(a) {
		case 1:
			b += 1;
		case 11:
			b += 2;
		default:
			b += 3;
			break;
	}
	printf("%d", a-b);
}
-13

swap() 함수는 main 출력에서 영향을 주지 않기 때문에 신경쓰지 않고 switch 값만 계산한다.

a가 11이기 때문에 case 11에서 b는 19 + 2 = 21이 되며 default에서 다시 3을 더하기 때문에 24가된다.

11 - 24 = -13

 

3️⃣ [C언어]

2023.2회

 다음 소스코드의 알맞은 출력 결과를 작성하시오

#include <stdio.h>
int main(){
	int c = 0;
    for(int i = 1; i <= 2023; i++){
    	if(i%4 == 0) c++;
    }
    printf("%d", c);
}
505

if 조건문을 보면 4로 나눈 나머지 값이 0인 i의 값이 있을때마다 c의 값이 1씩 늘어난다.

그럼 이 문제는 2023보다 작은 수 중, 4의 배수 값이 몇개가 되는 지 구하면 된다.

우선 2023보다 작으면서 4의 배수 중 가장 큰 수는 2020 = 4 * 505 이다.

4의 배수 개수는 505개이기 때문에 답은 505이다.