본문 바로가기

정보처리기사/실기

정보처리기사 실기 기출 - 2020년 4, 5회

반응형

- 약술형 -

1. 스니핑

정답

네트워크 상의 패킷 내용을 엿보는 행위

 

2. 정보보안의 목표 중 가용성

정답

합법적 사용자가 합법적 정보를 요구할 때 적시에 제공되어야 함

 

 

 

- 필답형 - 

1. 보기의 빈칸에 들어갈 용어는?

[보기]

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인상의 문제를 정리해서 상황에 따라 간편하게 적용하여 쓸 수 있는 패턴 형태로 만든 것이다. GoF(Gang of Four)으로 불리는 에리히 감마, 리처드 헴, 랄프 존슨, 존 블리시데스가 여러개의 패턴을 집대성하여 저술한 책이 유명한 [디자인 패턴 : 재사용 가능한 개체 지향 소프트웨어의 요소들] 이다. GoF의 디자인 패턴에는 생성, 구조, (    ) 이/가 있다. 생성 패턴은 객체의 생성에 관련된 패턴이고, 구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이며, (   ) 패턴은 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴이다.

정답

행위

 

2. 보기에서 설명하는 것은?

[보기]

탭이 달린 폴더 안에 요소들을 집어넣어 표현하는 다이어그램으로, 컴포넌트 구조 사이의 관계를 표현하며, 요소들을 그룹으로 조직하기 위한 매커니즘의 UML 다이어그램

정답

패키지 다이어그램

 

3. 보기에서 설명하는 것은?

[보기]

테스트 오라클은 테스트의 결과가 참인지 거짓인지를 판단하기 위해 사전에 정의된 참값을 입력하여 비교하는 기법 및 활동을 말함. 테스트 오라클의 유형 중 전수 테스트가 불가한 경우, 특정한 몇개의 입력값에 대해서만 기대하는 결과를 제공해주는 오라클로, 경계값, 구간별 예상값에 대한 결과를 작성할때 사용하는 오라클

정답

샘플링 오라클

 

4. 다음에서 설명하는 것은?

아래 표는 주어진 평가점수 별 학점 조건을 토대로 테스트 케이스를 작성하여 테스트를 진행한 결과임. 아래 표에 적용한 테스트 기법은 명세 기반 테스트의 기법 중 프로그램의 입력 조건에 중점을 두고, 어느 하나의 입력조건에 대하여 타당한 값과 그렇지 못한 값을 설정하여 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 테스트 기법

[조건]

평가 점수 학점
0~60 F
60~70 D
70~80 C
80~90 B
90~100 A

[결과]

테스트 케이스 2 3 4 5
구간 0~60 60~70 70~80 80~90 90~100
테스트 데이터 55 66 77 88 99
예측값 F D C B A
결과값 F D C B A

정답

동치 분할 테스트

 

5. 보기에서 설명하는 것은?

[보기]

데이터베이스에서 릴레이션을 처리할때 이상현상 3가지

정답

삽입이상, 삭제이상, 갱신이상

 

6. 보기의 빈칸에 들어갈 용어는?

[보기]

데이터 회복 기법은 트랜잭션들을 수행하는 도중, 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업을 말한다. 다양한 데이터 회복 기법 중 (   ) 회복 기법은 로그를 이용한 회복 기법으로, 데이터베이스에 대한 갱신로그를 저장함으로써, 회복에 대비한다. 일반적으로 데이터베이스와 로그의 동시 손상을 대비하여 별도의 전용 디스크에 로그를 저장할 수 있다. (   ) 회복 기법은 트랜잭션이 실행 상태에서 변경되는 내용을 즉시 데이터베이스에 적용하는 기법이다. 변경되는 모든 내용은 로그에 기록하여 장애 발생시 로그의 내용을 토대로 회복시킨다. (   ) 회복 기법은 장애가 발생하면 로그 파일에 기록된 내용을 참조하여 장애 발생 시점에 따라 Redo나 Undo를 실행하여 데이터베이스를 복구한다.

정답

즉시 갱신

 

7. 보기의 빈칸에 들어갈 용어는?

정답

(1) 준비, (2) 실행, (3) 대기

 

8. 보기에서 설명하는 용어는?

[보기]

IETF에서 IP Address의 부족과 Mobile IP Address 구현 문제를 해결 방안으로 만들어진 IPv4를 보완하는 차세대 IP Address 주소 체계. 주소 유형은 유니캐스트, 멀티캐스트, 브로드캐스트가 존재하며, 주소의 길이는 128bit이고, 8개 그룹으로 배열되며, 각 그룹은 16비트이다. 각 그룹은 4개의 16진수로 표현되며, 그룹 간은 콜론(:)으로 구분된다. 패킷 전송 시 멀티캐스트를 사용한다.

정답

IPv6

 

9. 보기에서 설명하는 용어는?

[보기]

1960년대 말 벨 연구소에서 개발된 운영체제로 다중 사용자, 멀티태스킹 운영체제. 이식성이 높으며 대화식 운영체제로 서버 운영에 필수적인 CLI 인터페이스가 강력하다. C언어라는 고급 프로그래밍 언어로 커널까지 대부분 작성된 운영체제. 파일 생성, 삭제, 보호 기능을 가지며, 디렉터리 구조는 계층적 트리 구조 형태.

정답

유닉스

 

10. 보기에서 설명하는 용어는?

[보기]

PC처럼 가격이 싼 컴퓨팅 서버들과 저장장치들을 활용하여 가상화된 거대한 저장장치를 형성하고, 그 안에 빅데이터를 상대적으로 쉽게 저장하고 활용하여 처리할 수 있도록 한 분산 파일 시스템. 2004년 미국 프로그래머 더그 컷팅이 방대한 데이터를 처리하기 위하여 구글의 맵리듀스 등을 활용해 이를 개발하였다.

정답

하둡

 

11. 보기에서 설명하는 용어는?

[보기]

오픈소스 분산 컴퓨팅 기술로 분산 처리와 암호화 기술을 동시에 적용한 분산 데이터베이스의 한 형태이다. 가상화폐의 거래 정보를 기록한 원장인 '블록'이라고 하는 소규모 데이터들이 특정 기관의 중앙 서버에서 공동으로 기록관리되지 않고, P2P 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장 환경에 저장된다. 때문에 누구라도 임의로 수정할 수 없지만, 누구나 변경 결과를 열람할 수 있는 기술이다.

정답

블록체인

 

12. 보기에서 설명하는 용어는?

[보기]

우리나라 말로 번역하면 "네트워크 주소 변환"으로, 내부에서 사용하는 사설IP 주소와, 외부로 보여지는 공인 IP주소 간의 IP Address 변환 방식을 말한다. 한정된 하나의 공인 IP를 여러 개의 내부 사설IP로 변환하여 사용하기 위한 기술이며, 내부 네트워크 주소의 보안을 위해 사용하는 방법 중 하나

정답

NAT

 

 

 

- DB -

1. 다음 조건의 쿼리문 작성

학생 테이블을 대상으로 요구사항을 적용하여 아래 결과와 같이 출력하는 SQL문 작성

[조건]

(1) WHERE 구문 사용 금지

(2) GROUP BY 구문과 집계함수를 반드시 사용

(3) 인용 문구를 사용 시 작은따옴표(’ ‘) 사용가능

(4) AS 구문 반드시 사용

(5) SQL 명령문의 대/소문자를 구별하지 않으며, 종결문자인 세미콜론(;)은 생략가능

(6) 실행결과가 일치하더라도 [조건] 미적용시 오답

[학생]

학번 이름 학과 성적 전화번호
2020052001 철수 전기 90 010-1111-1111
2020130005 민수 컴퓨터 70 010-2222-2222
2021007006 영희 건축 85 010-3333-3333
2022007003 민호 건축 95 010-4444-4444
2020013010 광철 컴퓨터 100 010-5555-5555

[결과]

학과 학과별튜플수
전기 1
컴퓨터 2
건축 2

정답

SELECT 학과, COUNT(*) AS 학과별튜플수 FROM 학생 GROUP BY 학과;

 

 

 

- 프로그래밍 -

1. C

#include <stdio.h>

int main(void) {
	char *p = "KOREA";
	printf("%s\n", p);
	printf("%s\n", p+3);
	printf("%c\n", *p);
	printf("%c\n", *(p+3));
	printf("%c\n", *p+2);
}

정답

KOREA

EA

K

E

M

해설

#include <stdio.h>

int main(void) {
	// 포인터 변수를 KOREA의 제일 앞에 위치시킨다.
	char *p = "KOREA";
	// 포인터 변수의 위치부터 끝까지 출력한다.
	printf("%s\n", p);
	// 포인터 변수의 위치에서 3칸 뒤의 문자부터 끝까지 출력한다.
	printf("%s\n", p+3);
	// 포인터 변수의 위치에 있는 문자만 출력한다.
	printf("%c\n", *p);
	// 포인터 변수의 3칸 뒤에 있는 문자만 출력한다.
	printf("%c\n", *(p+3));
	// 포인터 변수의 위치에 있는 문자에 2를 더한 값을 출력한다.(아스키 코드 참조)
	printf("%c\n", *p+2);
}

- %s는 문자열 전체를 출력한다.

- %c는 문자 하나를 출력한다.

 

 

2. JAVA

public class Exam {
	public static void main(String[] args) {
		int[][] arry = new int[(1)][(2)];
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 5; j++) {
				arry[i][j] = j * 3 + (i + 1);
				System.out.print(arry[i][j] + " ");
			}
			System.out.println();
		}
	}
}

처리 결과

1 4 7 10 13

2 5 8 11 14

3 6 9 12 15

정답

(1) 3, (2) 5

해설

public class Exam {
	public static void main(String[] args) {
		// 정수형 배열 arry를 선언한다.
		// new 생성자를 활용하여 세로 (1), 가로 (2) 규모의 배열을 대입한다.
		int[][] arry = new int[(1)][(2)];
		// i=0부터 2까지 명령문 반복, i값은 1씩 증가시킨다.
		for (int i = 0; i < 3; i++) {
			// j=0부터 4까지 명령문 반복, j값은 1씩 증가시킨다.
			for (int j = 0; j < 5; j++) {
				// i행 j열에 j*3 + (i+1)을 대입한다.
				arry[i][j] = j * 3 + (i + 1);
				// i행 j열의 값과 공백을 출력한다.
				System.out.print(arry[i][j] + " ");
			}
			// 행을 바꾼다.
			System.out.println();
		}
	}
}

 

 

 3. JAVA

class Parent {
	int compute(int num) {
		if (num <= 1)
			return num;
		return compute(num - 1) + compute(num - 2);
	}
}

class Child extends Parent {
	@Override
	int compute(int num) {
		if (num <= 1)
			return num;
		return compute(num - 1) + compute(num -3);
	}
}

public class Bebsae {
	public static void main(String[] args) {
		Parent obj = new Child();
		System.out.print(obj.compute(4));
	}
}

정답

1

해설

class Parent {
	// 정수형 매개변수 num을 가지는 compute라는 메소드를 선언한다.
	int compute(int num) {
		// 만약 num의 값이 1과 같거나 작으면 명령어 실행
		if (num <= 1)
			// num 값을 반환한다.
			return num;
		// compute(num-1) + compute(num-2) 값을 반환한다.
		return compute(num - 1) + compute(num - 2);
	}
}

// 부모 클래스를 상속하는 자식클래스 선언
class Child extends Parent {
	@Override
	// 정수형 매개변수 num을 가지는 compute라는 메소드를 선언한다.
	int compute(int num) {
		// 만약 num의 값이 1과 같거나 작으면 명령어 실행
		if (num <= 1)
			// num 값을 반환한다.
			return num;
		// compute(num-1) + compute(num-3) 값을 반환한다.
		return compute(num - 1) + compute(num -3);
	}
}

public class Bebsae {
	public static void main(String[] args) {
		// 자식 클래스의 생성자를 통해 객체 변수 생성
		// 부모 클래스의 자료형을 사용
		Parent obj = new Child();
		// obj 객체의 compute메소드 호출 및 4를 대입하여 출력
		System.out.print(obj.compute(4));
	}
}

-  Bebsae 클래스에서 obj 객체변수를 생성한다.

- obj 객체의 compute메소드를 호출한다.

- 오버라이딩 하였으므로 자식 클래스에서 부모 클래스의 메소드를 재정의 한다.

- 오버라이딩된 메소드는 부모 클래스의 메소드보다 우선순위가 높다.

- compute 메소드를 실행한다. 이때 num=4이다.

 

- num은 4이므로 1보다 크다. 그러므로 조건문 FALSE

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

- compute(1)에서 num은 1이므로 1과 같다. 조건문 TRUE. num=1

- compute(3)에서 num은 3이므로 1보다 크다. 조건문 FALSE

 

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

- compute(0)에서 num은 0이므로 1보다 작다. 조건문 TRUE. num=0

- compute(2)에서 num은 2이므로 1보다 크다. 조건문 FALSE

 

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

- compute(-1)에서 num은 -1이므로 1보다 작다. 조건문 TRUE. num=-1

- compute(1)에서 num은 1이므로 1과 같다. 조건문 TRUE. num=1

 

- num값을 모두 더하면 1+0+-1+1=1

 

 

4. Python

lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
print(lol[0])
print(lol[2][1])

for sub in lol:
	for item in sub:
		print(item, end = "")
	print()

정답

[1, 2, 3]

7

1 2 3

4 5

6 7 8 9

해설

// lol이라는 변수에 2차원 리스트 값을 대입한다.
lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
// lol 배열의 첫번째 행의 값을 출력한다.
print(lol[0])
// lol 배열의 세번째 행의 두번째 열의 값을 출력한다.
print(lol[2][1])

// 리스트 lol의 값을 변수 sub에 대입하여 반복
for sub in lol:
	// sub의 값을 item에 대입하여 반복
	for item in sub:
		// item 값과 공백을 출력한다.
		print(item, end = "")
	// 행을 바꿈
	print()

- for 변수 in 리스트: 형태로 수행

 

 

5. JAVA

public class Bebsae {
	public static void main(String[] args) {
		int a[] = new int[8];
		int i=0, n=10;
		while ( 1 ) {
			a[i++] = ( 2 );
			n/=2;
		}
		for (i=7, i>=0, i--)
			System.out.printf("%d", a[i]);
	}
}

처리 결과

00001010

정답

(1) n>0, (2) n%2

해설

public class Bebsae {
	public static void main(String[] args) {
		// 정수형 배열 a를 선언하고, 생성자를 이용해 배열에 8 대입
		int a[] = new int[8];
		// 정수형 변수 i, n을 선언하고 각각 0과 10을 대입
		int i=0, n=10;
		// ( 1 ) 조건의 반복문 수행
		while ( 1 ) {
			// 배열의 i번째값에 ( 2 )를 대입
			a[i++] = ( 2 );
			// n=n/2
			n/=2;
		}
		// i=7에서 0까지 1씩 감소시켜가며 반복
		for (i=7, i>=0, i--)
			// a배열의 i+1번째 값을 출력
			System.out.printf("%d", a[i]);
	}
}

- 10진수 -> 2진수에서 핵심, 2로 나눈 나머지를 모두 배열에 저장하고, 배열을 역순으로 출력하면 됨

- 10>0일때 TRUE, a[0]=10%2=0

- 5>0일때 TRUE, a[1]=5%2=1

- 2>0일때 TRUE, a[2]=2%2=0

- 1>0일때 TRUE, a[3]=1%2=1

- 0>0일때 FALSE, for문 진행

반응형