정처기 실기 : 2024년 2회차 기출, 1️⃣1️⃣ ~ 2️⃣0️⃣

m_ngyeong·2024년 10월 17일
0
post-thumbnail

정보처리기사 실기


📝 2024년 2회차 기출, 1️⃣1️⃣ ~ 2️⃣0️⃣

11. C Lang.

#include <stdio.h>

void func(char *d, char *s) {
	int sum = 0;
	while (*s) {
		*d = *s;
		d++;
		s++;
	}
	*d = '\0';
}

int main() {
    char *str1 = "first"; 
	char str2[50] = "teststring"; 
	int result = 0;
	func(str2, str1); // 문자열 복사 함수

	for (int i = 0; str2[i] != '\0'; i++) {
		result += i;
	}
	printf("%d", result);
	return 0;
}

🖍 10

문자열 복사와 배열을 순회하면서 인덱스를 더하는 프로그램.

  1. main함수에서 str1은 문자열 리터럴 "first"를 가리키고 있고, str2은 문자열 "teststring"로 초기화 됨.
    ▪️ str1 = "first"
    ▪️ str2 = "teststring"
  2. func(str2, str1);를 호출하면, dstr2 배열을, sstr1을 가리킴.
  3. func(char *d, char *s) 함수의 while (*s) 루프는 s가 가리키는 문자가 널(\0) 문자가 아닐 동안 반복.
    ▪️ *d = *s;에 의해 s가 가리키는 문자인 "first"의 문자가 d가 가르키는 str2 배열의 각 위치에 복사됨.
    ▪️ 루프 실행 과정:
    - 첫 번째 반복: *d = *s는 'f'를 str2[0]에 복사 → str2는 "feststring"
    - 두 번째 반복: 'i'를 str2[1]에 복사 → str2는 "fiststring"
    - 세 번째 반복: 'r'를 str2[2]에 복사 → str2는 "firtstring"
    - 네 번째 반복: 's'를 str2[3]에 복사 → str2는 "firsstring"
    - 다섯 번째 반복: 't'를 str2[4]에 복사 → str2는 "firsttring"
  4. 다섯 글자의 복사가 끝난 후, *s가 널(\0) 문자가 되면서 루프가 종료됨. 마지막으로 *d = '\0';에 의해 str2 배열의 다음 위치에 널 문자가 들어가서 문자열이 정상적으로 끝남.
    ▪️ str[5] = 널(\0) 문자가 되면서 문자열 종료.
  5. 최종적으로, str2는 "first"가 됨.
  6. for 문에서 str2 문자열의 각 문자를 순차적으로 순회하면서, 인덱스 i의 값을 result에 더함.
    ▪️ str2가 "first"로 변경되었으므로, 이 루프는 i = 0부터 i = 4까지 실행됨.
    ▪️ result = 0 + 1 + 2 + 3 + 4 = 10

12. Java Lang. - 홀짝 각각의 합

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

홀수, 짝수 각각의 합 구하는 프로그램

Number라는 인터페이스와 OENumber라는 클래스를 정의하여, 특정 조건에 따라 배열에서 홀수 또는 짝수만을 골라 그 합을 구하는 구조로 되어 있다.
1. Number 인터페이스:
sum이라는 메서드를 정의. 이 메서드는 배열 aboolean odd를 매개변수로 받아 int 값을 반환하는데, 배열에서 홀수나 짝수만 골라 그 합을 반환하는 기능을 구현하도록 설계되었음.
2.OENumber 클래스: Number 인터페이스 구현.
▪️ oddtrue일 때는 홀수인 경우 a[i] % 2 != 0만 더함. (a[0]=1일 때, 1 % 2 !=0true)
result = 1 + 3 + 5 + 7 + 9 = 25
▪️ oddfalse일 때는 홀수인 경우 a[i] % 2 != 0만 더함.
result = 2 + 4 + 6 + 8 = 20

13. RIP 경로

다음 라우터 A에서 라우터 F까지 경로를 설정하기 위해 RIP 방식을 사용한다고 할 때, 라우터가 지나가는 경로를 순서대로 쓰시오.(단, 간선 위의 숫자는 라우터 간의 거리를 의미한다.)

🖍 A → D → C → F

RIP 최단 경로

  • 홉 수(hop count)가 가장적은 경로
    *홉 수는 라우터가 목적지까지 가는 데 거쳐야 하는 라우터의 수를 의미
  • (홉 수 동일하다면)비용이 적은 경로
  • 홉 수가 15를 넘기면 불가능한 경로로 판단

14. 알고리즘

  • 대칭키 알고리즘으로 1997년 NIST(미국 국립기술표준원)에서 DES를 대체하기 위해 생성되었다.
  • 128비트, 192비트 또는 256비트의 가변 키 크기와 128비트의 고정 블록 크기를 사용한다.
  • 높은 안전성과 효율성, 속도 등으로 인해 DES 대신 전 세계적으로 많이 사용되고 있다.

    🖍 AES

15. C Lang. - 2차원 배열

#include <stdio.h>

int main() {
    int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
	int* parr[2] = {arr[1], arr[2]};
	printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
	
	return 0;
}

🖍 21

2차원 배열

  1. arr[3][3]은 3x3 배열 :
arr[0]: 1 2 3
arr[1]: 4 5 6
arr[2]: 7 8 9
  1. parr는 포인터 배열
parr[0]: arr[1] -> {4, 5, 6}
parr[1]: arr[2] -> {7, 8, 9}
  • parr[1][1] == arr[2][1] : 8
  • *(parr[1]+2) == arr[2][2] : 9
  • **parr == arr[1][0] : 4
    *parrparr[0]을 가리키고, parr[0]arr[1]을 가리킴.
  1. ∴ 8 + 9 + 4 = 21

16. SRT 스케줄링의 평균 대기시간

🖍 6.5

SRT 스케줄링 진행 과정:

0: A 들어옴 (남은 시간 8 → 7) A 실행
1: B 들어옴 (남은 시간 4 → 3, 잔여시간이 가장 적음) B 실행
2: C 들어옴 B 실행
3: D 들어옴 B 실행
4: B 실행 (남은 시간 1 → 0) 
5: → B 종료
5~9: D 실행 (남은 시간 5 → 4, B 종료 후 잔여시간이 최처)
10: → D 종료
10~16: A 실행 (남은 시간 7 → 6, D 종료 후 잔여시간이 최처)
17: → A 종료
17~25: C 실행 (남은 시간 9 → 8) 
26: → C 종료
  • A 대기시간 : 0에서 한 번 실행, 1에서 실행되기 직전인 9초까지. "9초"
  • B 대기시간 : 들어오자마자 실행되고 끝남. "0초"
  • C 대기시간 : 들어온 2에서부터 실행되기 직전인 16초까지 "15초"
  • D 대기시간 : 들어온 3에서부터 실행되기 직전인 4초까지 "2초"
  • ( 9 + 0 + 15 + 2 ) / 4 = 6.5

17. Java Lang. - 재귀함수

public class Main {
    public static String rf(String str, int index, boolean[] seen) {
		if(index < 0) return "";
		char c = str.charAt(index);
		String result = rf(str, index-1, seen);
		if(!seen[c]) {
			seen[c] = true;
			return c + result;
		}
		return result;
	}
	
    public static void main(String[] args) {
        String str = "abacabcd";
		int length = str.length();
		boolean[] seen = new boolean[256];
		System.out.print(rf(str, length-1, seen));
    }
}

🖍 dcba

재귀함수

주어진 문자열에서 중복된 문자를 제거한 후, 뒤에서부터 순서를 유지하여 결과 문자열을 반환하는 재귀 함수이다.
1. 입력 매개변수:

  • str = "abacabcd"
  • length = index = 8-1
  • seen 배열: 길이 256인 불린 배열을 선언하고, 모든 값을 false로 초기화함. 이는 각 문자가 이전에 등장했는지를 추적하기 위한 배열임.
  1. if (index < 0):
    인덱스가 0보다 작으면 더 이상 문자를 처리할 필요가 없으므로 빈 문자열 ""을 반환하여 재귀 호출을 종료.
  2. str.charAt(index):
  • charAt()은 문자열의 특정 인덱스에 있는 문자를 반환하는 함수.
  1. 재귀적 호출:
  • rf(str, index - 1, seen)index - 1로 재귀 호출하여 문자열을 거꾸로 탐색.
  • 이 함수는 문자열을 끝에서부터 처리하며, 문자가 처음 등장한 경우만 결과에 추가.
  1. 중복 문자 처리:
  • 현재 문자 cseen 배열에 표시되지 않은 경우 (!seen[c]), 해당 문자를 결과 문자열 앞에 추가하고 seen[c]true로 설정하여, 앞으로 중복 문자가 나오면 처리되지 않도록 함.
  • 만약 문자가 이미 처리된 경우 (seen[c] == true), 그 문자는 결과에 포함되지 않고 넘어감.

18. 결합도

  • 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해, 제어를 통신하거나 제어 요소를 전달하는 결합도이다.
  • 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다.

🖍 제어 결합도(Control Coupling)

19. C Lang. - 구조체

#include <stdio.h>

struct node {
	int n1;
	struct node *n2;
};

int main() {
    struct node a = {10, 0};
	struct node b = {20, 0};
	struct node c = {30, 0};

	struct node *head = &a;
	a.n2 = &b;
	b.n2 = &c;

	printf("%d", head -> n2 -> n1);
	
	return 0;
}

🖍 20

구조체를 사용한 단일 연결 리스트 구성

  1. 구조체 정의:
  • struct node는 두 개의 멤버를 가진 구조체:
    • int n1: 정수 값을 저장하는 멤버.
    • struct node *n2: 다음 노드를 가리키는 포인터.
  1. main 함수 : struct node name = {};
  • a: n1은 10, n2는 0 (NULL을 의미).
  • b: n1은 20, n2는 0 (NULL을 의미).
  • c: n1은 30, n2는 0 (NULL을 의미).
  1. 연결 리스트 설정:
  • head : 리스트의 시작점을 가리키는 포인터로, heada의 주소를 저장.
  • a.n2b를 가리키도록 설정함, ab를 가리키게 됨.
  • b.n2c를 가리키도록 설정함, bc를 가리키게 됨.
  1. 출력:
  • head -> n2 -> n1:
    • heada를 가리키고 a.n2b를 가리킴. 따라서 head -> n2b를 가리킴.
    • b.n1은 20.

20. Java Lang.

"T"라는 문자를 기준으로 문자열을 나누고, 그 중 하나의 요소를 출력하는 예제

public class Main {
    public static void main(String[] args) {
        String str = "ITISTESTSTRING";
		String[] result = str.split("T");
		System.out.print(result[3]);
    }
}

🖍 S

  • String[] result = str.split("T"); :
    • str.split("T") : "T"를 기준으로 나누어진 배열로 저장됨.
    • result[0]: "I"
    • result[1]: "IS"
    • result[2]: "ES"
    • result[3]: "S"
    • result[4]: "RING"


참고,
https://www.gisafirst.com/,
https://newbt.kr/

profile
ʚȉɞ

0개의 댓글