본문 바로가기

정보처리기사/실기

정보처리기사 실기 기출 - 2021년 3회

반응형

- 약술형 -

1. SQL에서 GRANT의 기능

정답

사용자에게 DB에 대한 권한을 부여하는 명령어

 

 

 

- 필답형 -

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

[보기]

정보보호 기술인 AAA에 대한 설명

ㄱ. 망, 시스템 접근을 허용하기 전에 접근을 시도하는 사용자의 신원을 검증

ㄴ. 검증된 사용자에게 특정 수준의 권한을 허용

ㄷ. 사용자의 자원(시간, 정보, 위치 등)에 대한 사용 정보를 수집

정답

ㄱ. Authentication

ㄴ. Authorization

ㄷ. Accounting

 

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

[보기]

(   ) 스푸핑은 근거리 통신망에서 (   ) 메시지를 이용하여 상대방의 데이터 패킷을 가로채는 중간자 공격기법. 데이터 링크 상의 프로토콜인 (   )을/를 사용하므로 근거리 통신에서만 사용할 수 있다.

정답

ARP

 

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

[보기]

어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도. 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상 발생

정답

제어 결합도(Control Coupling)

 

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

[보기]

디자인 패턴에서, 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당하는 패턴

정답

Factory Method

 

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

[보기]

ㄱ. 최하위 모듈에서부터 상방으로 진행하는 (   ) 테스트

ㄴ. 하위 모듈을 포괄하는 (   )이/가 있어야 함

정답

ㄱ. 상향식 통합

ㄴ. 드라이버

 

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

[보기]

ㄱ. 레코드를 참조할 때는 (   )이/가 가리키는 주소를 사용하여 직접 참조 가능.

ㄴ. 파일 구조에는 순차 접근, (   ) 접근, 해싱 접근이 있다.

정답

인덱스

 

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

[보기]

식별자ID 테스트 항목 (  1  ) (  2  ) (  3  )
BEB-01 로그인 가능 사용자 초기 화면 사용자 아이디 TEST1, 비밀번호 123 로그인 성공
BEB-02 로그인 가능 사용자 초기화면  사용자 아이디 TEST2, 비밀번호 22& 로그인 실패

정답

(1) 테스트조건

(2) 테스트 데이터

(3) 예상 결과

 

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

[보기]

(   ) 다이어그램은 UML 다이어그램의 종류 중 하나로 속성, 메소드를 포함한다.

정답

클래스

 

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

[보기]

OSI Layer의 계층에 대한 설명

(1) 물리적으로 연결된 두 개의 노드 사이의 데이터 전송, 오류 제어

(2) 경로 제어, 패킷 전달

(3) 압축

정답

(1) 데이터 링크

(2) 네트워크

(3) 표현

 

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

[보기]

(   )는 블록 암호의 일종으로, 미국 NBS에서 국가 표준으로 정한 암호이다. 64비트 평문을 64비트 암호문으로 암호화하는 대칭키 암호 알고리즘으로, 7비트마다 오류 검출을 위한 정보가 1비트씩 들어가기 때문에 실질적으로는 56비트이다.

정답

DES

 

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

[보기]

입력 자료 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석 후 효용성이 높은 테스트 케이스를 선정해서 테스트하는 기법

정답

원인-결과 그래프(Cause-Effect Graph)

 

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

[보기]

(   )는 사용자가 그래픽을 통해 컴퓨터와 정보를 교환하는 환경을 의미하며, 키보드나 마우스를 이용하여 화면의 메뉴 중 하나를 선택하여 작업을 수행할 수 있다. 윈도우, 매킨토시 등이 그 예시이다.

정답

GUI

 

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

[보기]

눈에 보이지 않는 것을 개념적으로 표현하는것이 추상화이며, 실세계의 복잡한 상황을 간결하고 명확하게 개념화 하는 것을 의미

ㄱ. (   )은 클래스들 사이의 전체 또는 부분과 같은, 관계를 나타내는 것이다.

ㄴ. (   )은 한 클래스가 다른 클래스를 포함하는 상위 개념일때 IS-A관계라 하며, 일반화 관계로 모델링한다.

정답

ㄱ. 집합(Aggregation)

ㄴ. 일반화(Generalization)

 

 

 

- DB -

1. 다음 명령문의 결과값은?

[TEST1]

NAME
Sam
Stella
ALLEN

[TEST2]

RULE
s%
%e%

[명령문]

SELECT COUNT(*) CNT FROM TEST1 CROSS JOIN TEST2 WHERE TEST1.NAME LIKE TEST2.RULE;

정답

4

해설

- cross join은 join을 통해 확인할 수 있는 모든 행의 조합을 보여주는 것

- 각 결과를 곱해주면 된다.

- S로 시작하는 TEST1.NAME의 개수는 2개, T를 포함하는 TEST1.NAME의 개수도 2개이므로 2*2=4이다.

- cnt는 딱히 의미있는 단어가 아니라 그냥 컬럼 갯수에 이름을 붙여준 것임

 

 

- 프로그래밍 -

1. JAVA

class Connection {
	private static Connection _inst = null;
	private int count = 0;
	static public Connection getInstance() {
		if(_inst == null) {
			_inst = new Connection();
			return _inst; 
		}
		return _inst;
	}
	public void count() {
		count ++;
	}
	public int getCount() {
		return count;
	}
}
 
public class testcon {
	public static void main(String[] args) {
		Connection conn1 = Connection.getInstance();
		conn1.count();
        
		Connection conn2 = Connection.getInstance();
		conn2.count();
		
		Connection conn3 = Connection.getInstance();
		conn3.count();
    
		System.out.print(conn1.getCount());
	}
}

정답

3

해설

class Connection {
	// 기본 생성자에 private를 이용해 인스턴스 생성을 불가능하게 만듦
	// getInstance를 통해서만 객체생성 가능
	// 내부적으로 인스턴스가 생성되지 않았다면 인스턴스 생성
	// 기존에 생성되어 있다면 생성된 인스턴스를 리턴
	// 프로그램 전반에 걸쳐 하나의 인스턴스를 유지
	private static Connection _inst = null;
	private int count = 0;
	static public Connection getInstance() {
		// 만약 _inst가 공백이라면 명령문 실행
		if(_inst == null) {
			// 생성자를 이용해 Connection() 객체를 생성함
			_inst = new Connection();
			return _inst; 
		}
		return _inst;
	}
	public void count() {
		count ++;
	}
	public int getCount() {
		return count;
	}
}
 
public class testcon {
	public static void main(String[] args) {
		// getInctance를 이용해 객체 생성
		Connection conn1 = Connection.getInstance();
		// count메소드 실행
		conn1.count();
        
		// 이미 객체가 생성되어있으므로 최초로 생성한 객체를 리턴
		Connection conn2 = Connection.getInstance();
		conn2.count();
		
		Connection conn3 = Connection.getInstance();
		conn3.count();
    
		// getCount메소드의 반환값을 출력
		System.out.print(conn1.getCount());
	}
}

- 싱글톤 문제

- 생성자가 여러번 호출되어도 실제 생성되는 객체는 하나 뿐

- 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴

- count =0 이었는데, count()를 실행하면서 1씩 더해짐.

- 총 3번 count()실행하였으니 count=3

 

 

2. C

#include <stdio.h>

struct src {
	char name[12];
	int os, db, hab, hhab;
};

int main()
{
	struct src st[3] = {{"가", 95, 98}, {"나", 84, 91), {"다", 86, 75};
	struct src *p;
	
	p = &st [0];

	(p+1) -> hab = (p+1) -> os + (p+2) -> db;
	(p+1) -> hhab = (p+1) -> hab + p -> os + p -> db;

	printf("%d", (p+1) -> hab + (p+1) -> hhab);
}

정답

501

해설

#include <stdio.h>

// 구조체 src를 선언한다.
struct src {
	// 구조체 멤버1인 name을 선언한다.
	char name[12];
	// 정수형 구조체 멤버를 선언한다.
	// 구조체 멤버2는 os, 3은 db, 4는 hab, 5는 hhab
	int os, db, hab, hhab;
};

int main()
{
	// 구조체 변수를 선언합니다.
	// {구조체 멤버1의 초깃값, 구조체 멤버2의 초깃값, 구조체 멤버3의 초깃값}으로 초기화함.
	struct src st[3] = {{"가", 95, 98}, {"나", 84, 91), {"다", 86, 75};
	// 구조체 포인터 선언
	struct src *p;
	
	// p에는 배열 st의 첫번째 값을 대입합니다.
	p = &st [0];

	// hab = 84 + 75 = 159
	(p+1) -> hab = (p+1) -> os + (p+2) -> db;
	// hhab = 159 + 95 + 98 = 352
	(p+1) -> hhab = (p+1) -> hab + p -> os + p -> db;

	// 159 + 352 = 501
	printf("%d", (p+1) -> hab + (p+1) -> hhab);
}

- 구조체 src를 선언 후 중괄호에 구조체 멤버를 순서대로 선언한다.

- 구조체 멤버 값을 초기화 할때 name = {"가", "나", "다"}, os = {95, 84, 86}, db = {98, 91, 75}이다.

- 구조체 포인터를 이용해 값에 접근한다.

- (p+1) -> hab는 hab의 (p+1)위치에 접근한다는 뜻임

 

 

3. Python

x, y = 100, 200
print(x==y)

정답

FALSE

해설

- ==연산자는 좌우의 값이 같은지 비교하고, 같다면 TRUE, 다르면 FALSE를 출력함

- x와 y는 같지 않으므로 FALSE출력

 

 

4. C

#include <stdio.h>

int main()
{
	int *array[3];
	int a=12, b=24, c=36;
	array[0] =&a;
	array[1] =&b;
	array[2] =&c;

	printf("%d", *array[1] + **array + 1);
}

정답

37

해설

#include <stdio.h>

int main()
{
	// 포인터변수로 3칸짜리 array 배열을 선언한다.
	int *array[3];
	// 정수형 변수 선언
	int a=12, b=24, c=36;
	// 배열 첫번째 칸에 a를, 두번째 칸에 b를, 세번째 칸에 c를 대입
	array[0] =&a;
	array[1] =&b;
	array[2] =&c;

	// array배열의 2번째 값과 array 배열의 역참조 값, 1을 더해준다. 
	printf("%d", *array[1] + **array + 1);
}

- 이중포인터(**)는 해당 값이 참조하는 값을 참조한다.

- **array의 경우 array의 값이 참조하는 a의 값을 참조한다.

- 결국 *array는 24이고, **array는 12이니 1까지 더해주면 37이 된다.

 

 

5. JAVA

public class Bebsae{
	public static void main(String[] args) {
		int w=3, x=4, y=3, z=5;
		
		if((w==2 | w==y) & !(y>z) & (1==x ^ y!=z)) {
			w=x+y;

			if(7==x ^ y!=w) {
				System.out.println(w);
			} else{
				System.out.println(x);
			}
		} else{
			w=y+z;

			if(7==y ^ z!=w) {
				System.out.println(w);
			} else{
				System.out.println(z);
			}
		}
	}
}

정답

7

해설

public class Bebsae{
	public static void main(String[] args) {
		// 정수형 변수 선언
		int w=3, x=4, y=3, z=5;
		
		// w가 2이거나 w가 y와 같으면 TRUE,
		// y가 z보다 크지 않으면 TRUE,
		// x가 1이면 TRUE, y가 z가 아니라면 TRUE, 둘다 TRUE면 TRUE
		// 만약 셋 다 TRUE거나 FALSE면 TRUE
		if((w==2 | w==y) & !(y>z) & (1==x ^ y!=z)) {
			// w=4+3
			w=x+y;

			// 7이 x면 TRUE, y가 w와 같지 않으면 TRUE
			// 만약 둘다 TRUE면 FALSE
			if(7==x ^ y!=w) {
				System.out.println(w);
			} else{
				System.out.println(x);
			}
		} else{
			w=y+z;

			if(7==y ^ z!=w) {
				System.out.println(w);
			} else{
				System.out.println(z);
			}
		}
	}
}

- w는 3이지만, w는 y와 동일하므로 TRUE

- y가 z보다 크지 않으므로 TRUE

- x는 1이 아니라 FALSE, y와 z는 같지 않으므로 TRUE, 하나는 FALSE, 하나는 TRUE이므로 ^연산 결과는 TRUE

- 첫번째 if문은 전부 TRUE이므로 첫번째 명령문 실행

- w=4+3=7

- x는 7이 아니므로 FALSE, y는w와 같지 않으므로 TRUE, ^연산 결과는 TRUE

- w값인 7를 출력한다. 

반응형