상세 컨텐츠

본문 제목

2021년 7급 공채 전산직 기출 문항별 관련 이론 정리

기출문제/전산학 필기

by 이거인 2022. 9. 24. 01:06

본문

반응형

시험문제는는 고시 사이트에서 다운로드

1. 2021년도 국가공무원 7급 공채 제2차 필기시험 정답 가안(한글).hwp
0.08MB
3. 가책형 문제(한글).zip
18.27MB

 

사이버국가고시센터 문제/정답 안내

 

www.gosi.kr

 

# 데이터베이스론

1. SQL 언어에 대한 설명으로 옳지 않은 것은?

SQL은 관계 데이터베이스 시스템의 표준 언어이다.

SQL은 포괄적인 데이터베이스 언어로서 데이터 정의, 질의, 갱신을 위한 문들을 가지고 있다.

트랜잭션의 시작, 철회, 완료 등을 표현하기 위해 SQL에서는 COMMIT, ROLLBACK 등을 사용한다. = DCL

데이터 조작어는 데이터베이스에 데이터를 검색하여 추가하고 삭제하는 데 사용하며 SELECT, REVOKE가 이에 해당된다

 

명령어 종류    명령어 설명 
데이터 조작어
(DML :  Data Manipulation Language
SELECT  데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함
INSERT
UPDATE
DELETE 
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함.
 데이터 정의어
(DDL : Data Definition Language)
CREATE
ALTER
DROP
RENAME
TRUNCATE 
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
데이터 제어어
(DCL : Data Control Language) 
GRANT
REVOKE 
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
SAVEPOINT 
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함.
 

(출처) https://brownbears.tistory.com/180

 

2. 다음은 4개의 트랜잭션 T1, T2, T3, T4에 대하여 시스템 고장(crash) 시점에 특정 스케줄에 대응하는 로그를 나타낸 것이다. 이 시스템은 로그를 이용한 회복기법으로 검사점(checkpoint)가진 즉시갱신규약(immediate update protocol)을 사용한다고 가정한다. 시스템 고장으로부터 회복(recovery)하는 과정에서 undoredo 연산들을 수행하게 된다. 회복 후 데이터 항목 A, B, C, D 값들을 바르게 연결한 것은? (, 로그 레코드 구조는 <트랜잭션, 데이터 항목, 현재 값, 변경 값>이다)

로그 번호 로그 레코드
1 <T1 start>
2 <T1, D, 20, 25>
3 <T1 commit>
4 <checkpoint {}>
5 <T2 start>
6 <T2, B, 12, 18>
7 <T4 start>
8 <T4, D, 25, 15>
9 <T3 start>
10 <T3, C, 30, 40>
11 <T4, A, 30, 20>
12 <T4 commit>
13 <T2, D, 15, 25>

시스템 고장

A B C D

30 12 30 20

20 18 40 25

30 18 40 15

20 12 30 15 -> ????

 
 

3. (view)에 대한 설명으로 옳지 않은 것은?

생성된 뷰는 새로운 독립적인 테이블로 물리 저장소에 저장된다. -> 논리

데이터베이스 질의 시 사용자 편의성 및 재사용성, 보안성을 높이기 위한 기술이다.

뷰의 질의연산은 제한을 받지 않지만 갱신연산은 제한을 받는다.

하나의 테이블로 여러 개의 상이한 뷰를 정의하여 사용자의 요구에 따라 활용할 수 있다.

 

4. 관계모델에 대한 설명으로 옳지 않은 것은?

관계모델에서 행은 투플(tuple), 열은 애트리뷰트(attribute)로 부른다.

투플 내의 각 값은 더 이상 나누어지지 않는 원자값이어야 한다.

투플 내 어떤 애트리뷰트의 값을 알 수 없거나 값이 지정되지 않을 때는 NULL이라는 특수한 값을 사용한다.

릴레이션은 투플들의 집합이기 때문에 릴레이션에서 투플이 순서대로만 나타나야 한다. -> 순서는 미정

 

5. 다음 사원 테이블에 대해 뷰_사원1과 같은 뷰를 생성하는 SQL 질의어를 작성할 때, , 에 들어갈 내용을 바르게 연결한 것은?

CREATE VIEW _사원1(사번, 이름)

( ㉠ = AS ) SELECT 사번, 이름

FROM 사원

WHERE ( ㉡ = 부서연구);

 

6. 트랜잭션 T1T2가 아래와 같이 수행될 때, T1, 출력 값은? (, 팬텀(phantom)을 초래하는 위반들을 허용하지 않는다)

sale
no name price
1 a1 200
2 a2 150
3 b1 100
T1 T2
set transaction isolation
level repeatable read;


set transaction isolation
level repeatable read; 
start transaction;

start transaction;

insert into sale
values(4, ‘b2’, 50);
select sum(price)
from sale;


commit
update sale set price=price+100
where no=3; -> commit전이어도 본인 트랜잭션이라 적용됨

select sum(price)
from sale;

commit

450 550

450 600

500 600

500 500

 

격리 수준 커밋되지 않은 읽기 반복되지 않는 읽기 가상
READ UNCOMMITTED
READ COMMITTED 아니요
REPEATABLE READ 아니요 아니요
SNAPSHOT 아니요 아니요 아니요
SERIALIZABLE 아니요 아니요 아니요
 

출처: http://egloos.zum.com/sweeper/v/3005129

 

7. 테이블 RS에 대해 아래의 SQL 질의어를 수행한 결과로 나오는 RSID 값은?

R
S
RSID CName CName
1001 국어 영어
1002 영어 국어
1003 국어
1003 수학
1004 국어
1004 영어
1004 수학
1005 과학
 

SELECT distinct(RSID) FROM R as x

WHERE NOT EXISTS (

(SELECT p.CName FROM S as p)

EXCEPT

(SELECT y.CName FROM R as y WHERE x.RSID = y.RSID));

 

1001 1002 1003 1004

 

8. 다음과 같은 student 테이블의 스키마가 주어졌을 때, 주어진 요구에 대한 SQL 질의어로 옳지 않은 것은?

student(studno, name, grade, score, deptno)

(, studno는 학번, name은 학생 이름, grade는 학년, score는 성적, deptno는 학생이 속한 학과 번호를 의미하며, studno는 기본키이다)

student 테이블에서 각 학과별 평균 성적, 최고 성적, 최저 성적 검색

SELECT deptno, AVG(score), MAX(score), MIN(score)

FROM student

GROUP BY deptno

student 테이블에서 각 학과의 각 학년별 인원수와 평균 성적 검색

SELECT deptno, grade, COUNT(*), AVG(score)

FROM student

GROUP BY deptno, grade

student 테이블에서 학과 번호가 100번 이상인 학과들의 평균 성적 검색

SELECT deptno, AVG(score)

FROM student

WHERE deptno >= 100

GROUP BY deptno

student 테이블에서 각 학년별로 학생 수가 10명 이상인 학년, 학생 수, 평균 성적 검색

SELECT grade, COUNT(*), AVG(score)

FROM student

WHERE COUNT(*) >= 10 -> having 절로 조건?

GROUP BY grade

 

 

9. 정규화(normalization)에 대한 설명 중 옳은 것만을 모두 고르면? (1)

.데이터의 정규화는 중복을 최소화하고 삽입, 삭제, 수정 이상을 최소화하기 위해서 함수적 종속성과 기본키를 기반으로, 주어진 릴레이션 스키마를 분석하는 과정이다
.릴레이션 스키마 R의 모든 원소들의 도메인(domain)나눌 수 있는 단위로 되어있을 때, R이 제1정규형에 속한다.
.2정규형이 되기 위해서는 릴레이션 R이 제1정규형이고 기본키가 아닌 속성이 기본키에 부분함수 종속이어야 한다.
.3정규형이 되기 위해서는 릴레이션 R이 제2정규형이고, 릴레이션 R의 함수 종속 관계에서 이행적 함수 종속을 제거해야 한다.
.4정규형이 되기 위해서는 릴레이션 R이 제3정규형이고, 함수 종속 관계에서 모든 결정자가 후보키이면 된다.

ㄱ, ㄹ , , , , ,

 

10. NOSQL에 대한 설명으로 옳지 않은 것은?

NOSQL은 샤딩(sharding)을 지원한다.

BigTable, Cassandra 등이 대표적인 NOSQL이다.

NOSQLRDBMS와 같이 스키마(schema)를 필요로 한다.

NOSQL은 가용성(availability)과 확장성(scalability)을 중요시 한다.

 

11. 함수 F의 종속성이 다음과 같을 때 구할 수 있는 함수 종속으로 옳지 않은 것은? (1)

F{AB, DB, DAC, BED}

E→D

EE

AED

ACBC

 

12. 데이터베이스 트리거(trigger)에 대한 설명으로 옳지 않은 것은?

테이블에서 이벤트 발생 시 자동으로 반응해 실행되는 작업이다.

트리거는 데이터베이스의 무결성을 유지하기 위한 도구이다

수준 트리거(row-level trigger)FOR EACH ROW STATEMENT 절을 사용하여 표시한다.

이벤트가 발생한 이후 실행되는 After 트리거와 이벤트가 발생하기 전에 실행되는 Before 트리거가 있다.

FOR EACH ROW : 이 옵션이 있으면 행 트리거가 된다.

 - 행수준 트리거(Row -Level Triggers) : 트랜잭션내의 각 행에 대해 한 번만 수행(컬럼의 각각의 행의 데이터 행 변화가 생길 때마다 실행되며,각 데이터 해의 값을 제어할 수 있다.)

 - 문장수준 트리거(Statement-level Triggers) : 트랜잭션내에서 한번만 수행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.

출처: https://pongshowng.tistory.com/26 [퐁숑퐁숑:티스토리]

 

트리거가 활성화되면 다음과 같이 트리거 수준 레벨에 따라 트리거가 실행됩니다.
FOR EACH ROW: 영향을 받는 행 세트의 행 수만큼 실행됩니다. 트리거 조치의 영향을 받는 특정 행을 참조해야 하는 경우 FOR EACH ROW 트리거 수준을 사용합니다. 이러한 경우의 예는 AFTER UPDATE 트리거에서 갱신된 행의 새 값과 이전 값을 비교하는 것입니다.
FOR EACH STATEMENT: 전체 트리거 이벤트에 대해 한 번만 실행됩니다.
출처: https://www.ibm.com/docs/ko/db2/11.1?topic=dt-specifying-what-makes-trigger-fire-triggering-statement-event 
 

13. 트랜잭션 수행 과정이 다음과 같을 때, DBMS에서 데이터 복원을 위해 수행되는 작업으로 옳지 않은 것은?

T2redo(재실행)된다.

T4undo(실행취소)된다. -> redo ?

T1에 대해서는 어떠한 작업도 수행하지 않는다.

체크포인트 시 로그 레코드 <checkpoint {T2, T5}>를 저장장치에 기록한다. -> 다른게 다 맞는듯..

 

14. 다음 데이터베이스가 만족하지 않는 제약조건은? (, STUDENT 릴레이션의 Dept_NoDEPARTMENT 릴레이션의 Dept_Number참조한다)

STUDENT
ID Name Dept_No Birth_Data
20120011 이지연 1 1993-01-23
20130023 김병수 3 1994-11-05
20140101 김남현 3 1995-08-21
20144006 차기현 2 1995-04-19
20105789 안정민 4 1991-01-03
DEPARTMENT
Dept_Name Dept_Number Quota Dean
컴퓨터공학과 1 35 김지연
전자공학과 2 40 정주현
유일성 제약조건: ID, dept_number가 값들이 모두 달라야 합니다.

② 참조 무결성 제약조건: department 테이블에 없는 값이 student 테이블에 존재

엔티티 무결성 제약조건: 기본키에 null, 중복값 존재 X

함수적 종속성 제약조건 : 속성들의 의미와 속성들 간의 상호 관계로부터 유도되는 제약조건

 

15. 외부, 개념, 내부 스키마로 구성되는 3-레벨 스키마 구조와 데이터 독립성에 대한 설명으로 옳지 않은 것은?

내부 레벨 또는 내부 스키마는 데이터베이스의 물리적 스토리지 구조를 기술한다.

논리적 데이터 독립성은 응용 프로그램이나 데이터베이스의 논리적 구조에 영향을 주지 않고 DBMS가 데이터의 물리적 구조를 변경할 수 있는 것을 말한다.

외부 스키마는 특정 사용자 그룹이 관심을 가지고 있는 데이터베이스의 일부분을 기술하며 데이터베이스의 나머지 부분을 그 사용자 그룹으로부터 숨겨 준다.

SQL 뷰가 정의된 기 테이블이 확장된다든지 뷰가 속해 있는 테이블이 더 늘어난다고 하더라도 기존의 뷰를 사용하는 프로그램이나 사용자는 영향을 받지 않으므로, SQL 뷰는 데이터의 논리적 독립성을 어느 정도 제공할 수 있다.

  • 논리적 데이터 독립성은 응용 프로그램에 영향을 주지 않고 데이터베이스 논리적 구조를 변경할 수 있는 능력
  • 2번의 설명은 물리적 데이터 독립성이다.

 

16. 다음 SQL 명령어 중 데이터 정의어(DDL)만을 고르면?

.ALTER  -> ??
.DROP
.TRUNCATE
.GRANT -> DCL: REVOKE
.COMMIT -> TCL

, ㅁ  , , ,

 

17. 다음 데이터베이스 스키마를 보고, 아래 SQL 질의문과 동등한 관계대수식은? ????

스키마
사원(사원번호, 부서번호, 급여, 취미)
부서(부서번호, 부서명, 건물층, 전화번호)
재정(부서번호, 예산, 매출, 비용)

질의문
Select D.부서명, F.예산
From 사원 E, 부서 D, 재정 F

Where E.부서번호=D.부서번호 and D.부서번호=F.부서번호 and D.건물층=1 and E.급여>=3000000
and E.취미=‘테니스

① 𝜋D.부서명, F.예산((𝜋E.부서번호(𝜎E.급여>=3000000 and E.취미=‘테니스’(E)) ⨝ 𝜋D.부서번호, D.부서명(𝜎D.건물층=1(D))) ⨝ 𝜋F.예산, F.부서번호(F))

𝜋E.부서번호((𝜋D.부서명, F.예산(𝜎E.급여>=3000000 and E.취미=‘테니스(E))

𝜋D.부서번호, D.부서명(𝜎D.건물층=1(D))) 𝜋F.예산, F.부서번호(F))

𝜋D.부서명, F.예산((𝜋F.부서번호, D.부서명(𝜎D.건물층=1(D))

𝜋E.부서번호(𝜎E.급여>=3000000 and E.취미=‘테니스(E))) 𝜋F.예산(F))

𝜋D.부서명, F.예산((𝜋E.부서번호(𝜎F.예산, F.부서번호(F))

𝜋D.부서번호, D.부서명(𝜎D.건물층=1(D))) 𝜋E.급여>=3000000 and E.취미=‘테니스(E))

 
 

18. 다음 릴레이션 RS에 대한 조인 연산 결과가 옳지 않은 것은? (, N은 자연 조인, 은 왼쪽 외부 조인, 은 오른쪽 외부 조인, 은 세미 조인을 의미한다) - 4빼고 다 맞음. 근데 4번의 세미조인은 멀까

 

19. 분산 데이터베이스 관리시스템에서 복수의 분할된 물리적 데이터베이스를 논리적으로 단일화된 데이터베이스처럼 인식하게 하기 위한 투명성(transparency)에 대한 설명으로 옳지 않은 것은?

단편화(fragmentation) 투명성은 사용자들이 릴레이션이 어떻게 단편화되어 있는지 알 필요가 없다.

② 장애(failure) 투명성은 다수의 트랜잭션이 동시에 수행되는 경우에도 오류 없이 결과의 일관성이 유지되어야 하는 성질이다.

중복(replication) 투명성은 중복된 데이터가 무엇인지 저장 위치 등에 대한 정보를 사용자가 별도로 인지할 필요가 없어야 하는 성질이다.

위치(location) 투명성은 사용자나 애플리케이션에서 작업을 수행하기 위해 데이터의 물리적인 위치도 알 필요가 없어야 하는 성질이다.

- 2번 설명은 병행 투명성이고, 장애 투명성은 장애에도 오류 없이 결과의 일관성이 유지되어야 하는 성질이다.

 

20. 다음 사원 테이블에서 차수와 카디날리티 값을 바르게 연결한 것은?

사원
사번 이름 직급 부서
108002 김진수 부장 인사
105123 이수진 대리 연구
128372 박지훈 과장 영업

차수 카디날리티

3 3

3 4

③ 4 3

4 4

- 차수: 애트리뷰트 수
- 카디날리티: 레코드(튜플) 수

21. 데이터베이스 암호화 방식 중 API 방식에 대한 설명으로 옳지 않은 것은?

API 방식은 암복호화 모듈을 어플리케이션 서버에 설치한다.

플러그인 방식보다 암복호화 속도가 상대적으로 빠르다.

플러그인 방식보다 응용 프로그램의 수정이 필요 없어 사용이 편리하다.

플러그인 방식보다 데이터베이스 서버의 부하가 거의 발생하지 않는다.

 

22. 여러 트랜잭션을 병행수행(concurrency)하였을 때, 발생할 수 있는 문제 가운데 갱신분실(lost update)에 대한 설명으로 옳은 것은?

두 개의 트랜잭션은 서로 상대 트랜잭션이 완료되기만을 기다리고 있는 상태로, 두 트랜잭션은 영원히 완료될 수 없는 문제이다.

장애가 발생한 트랜잭션에 대한 롤백(rollback)이 수행되기 전에, 변경된 데이터를 가져가 사용하는 다른 트랜잭션의 수행이 완료되어 롤백이 실행될 수 없는 문제이다.

하나의 트랜잭션이 수행한 데이터 변경 연산의 결과를 다른 트랜잭션이 덮어써서 기존 트랜잭션의 변경 연산 결과가 손실되는 것이다.

하나의 트랜잭션이 여러 개의 데이터에 대해 변경 연산을 실행했을 때, 일관성이 유지되지 않는 데이터베이스로부터 데이터를 가져와 연산을 실행함으로 발생될 수 있다.

 

23. 다중 데이터베이스 시스템에서 2단계 완료 프로토콜(two-phase commit protocol) 기법에 대한 설명으로 옳은 것은?

1단계 수행 중 고장이 발생하면, 해당 트랜잭션은 회복되거나 완료된다.

트랜잭션 관리자(Transaction Manager:TM)는 그 지역 사이트에서 시작된 트랜잭션의 실행을 조정하는 역할을 한다.

1단계에서는 조정자가 메시지[prepare T]에 대한 응답을 모든 사이트로부터 받으면 트랜잭션 T가 완료(commit)될 수 있는지 결정할 수 있다.

④ 2단계에서 조정자가 모든 참여 사이트로부터 메시지[ready T]를 받았다면 트랜잭션 T는 완료되고 그렇지 않으면 취소된다.

참고: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=k97b1114&logNo=220543504607 

 

24. 데이터베이스 재해 복구(disaster recovery) 기술에 대한 설명으로 옳은 것은?

재해적 실패가 발생하면 가장 최근의 백업 사본이 디스크에서 백업장치로 적재된다.

은행, 보험, 주식 등과 같은 중요한 응용에서는 데이터 전체를 주기적으로 백업하여 안전한 장소에 보관한다.

시스템 로그를 백업하면 사용자는 마지막 데이터베이스 백업 이후에 수행한 모든 트랜잭션을 잃게 된다.

백업된 시스템 로그에 기록되어 있는 모든 완료된 트랜잭션의 실행결과는 데이터베이스를 undo하는 데 사용될 수 있다.

 

25. 릴레이션 RK 단계 합병(k-way merge) 정렬을 수행하고자 한다. 정렬이 완료될 때까지 최소 몇 번의 디스크 접근(읽기쓰기 횟수)이 필요한가? (, 문제에서 언급되지 않은 다른 기법은 고려하지 않는다)

각 디스크 블록에는 레코드 200개씩 저장되어 있음
주 기억장치의 최대 사용가능한 크기:레코드 1,000개 크기
전체 정렬해야 할 레코드의 개수:3,200

32

64

96

128

 

주기억장치의 최대 사용 가능한 크기 : 레코드 1,000개 크기
이므로 편의상 4로 나눈 것입니다.

하지만 4로 나누지 않고 런 크기는 같지 않아도 되므로
1000, 1000, 1000, 200
1000, 1000, 900, 300
900, 900, 900, 500 등으로 나누어도 됩니다.

 
 

# 소프트웨어공학

1. 다음 특징을 가지는 소프트웨어 개발 방법론은?

리팩토링(refactoring)
사용자 스토리(user story)
소규모 릴리즈(small release)
짝 프로그래밍(pair programming)
테스트 우선 개발(test-first development)

COCOMO

익스트림 프로그래밍(XP)

통합 프로세스(UP)

폭포수(waterfall) 모델

 

2. 다음 상황에 가장 적합한 소프트웨어 아키텍처 패턴은?

데이터 관리 컴포넌트, 인터랙션 제어 컴포넌트, 화면 관리 컴포넌트를 분리
하나의 데이터를 다양한 그래프로 보여 줄 수 있는 데스크탑 응용 프로그램 개발
데이터베이스 연동 부분과 사용자 웹 화면 제공 부분으로 나눈 웹 기반 응용 프로그램 개발

MVC(Model-View-Controller)

리포지토리(repository)

트랜잭션 처리(transaction processing)

파이프 필터(pipe-and-filter)

 

3. LOC(Lines Of Code) 기법에 의해 예측된 프로젝트의 총라인 수가 80,000LOC이고, 투입 개발자 수는 8, 개발자 1인당 월평균 생산성이 500LOC일 경우, 개발에 소요되는 시간은?

10개월

16개월

20개월

40개월

 

4. 사용자 요구분석 명세서의 바람직한 특성으로 옳지 않은 것은?

서로 모순되는 부분이 없어야 한다.

고객과 개발자가 동의한 것이어야 한다.

고객과 개발자 모두 쉽게 이해할 수 있어야 한다.

시스템의 구조와 서브 시스템의 구조를 포함하여 기술해야 한다.

 

5. 아키텍처의 41 관점에 대한 설명으로 옳지 않은 것은?

배치 관점은 시스템을 구성하는 처리 장치 간의 물리적 배치에 초점을 둔다.

프로세스 관점은 시스템에서 런타임에 상호 작용하는 프로세스들이 어떻게 구성되는지 보여 준다.

구현 관점은 물리적 시스템에서 사용하는 소프트웨어 서브시스템의 모듈이 어떻게 구조화되어 있는가에 관심을 둔다.

유스케이스 관점은 시스템의 기능을 제공하기 위해 필요한 클래스나 컴포넌트의 종류, 그리고 이들의 관계에 초점을 둔다.

 

6. 다음 자바 코드에 나타난 것과 같이 동일한 이름의 메시지로 다른 구현을 호출할 수 있는 객체 지향 개념은?

Animal a;
a = new Dog( );
a.makeSound( ); // “멍멍출력함
a = new Cat( );
a.makeSound( ); // “야옹출력함

다형성

정보 은닉

정적 바인딩

캡슐화

 

7. 다음 제어흐름 그래프에 대한 순환 복잡도(cyclomatic complexity)?

3 4 5

 

8. 다음 유스케이스 다이어그램에 대한 설명으로 옳지 않은 것은?

계좌이체해외이체보다 일반화된 유스케이스에 해당한다.

계좌이체유스케이스가 수행되면 가이체유스케이스도 수행된다.

계좌조회’, ‘계좌이체’, ‘해외이체유스케이스는 사용자액터에 의해 수행된다.

인증유스케이스는 계좌조회계좌이체유스케이스에 포함되어 수행된다.

 

9. 다음 설명에 해당하는 아키텍처는?

네트워크의 어떠한 노드라도 주어진 연산을 수행할 수 있는 비중앙집중적인(decentralized) 아키텍처로, 서버와 클라이언트의 구분이 없다. 별도의 중앙 서버 없이 사용자의 PC 사이에서 파일을 주고받기 위한 파일 공유 네트워크 등이 이에 해당한다.

마이크로서비스(microservice) 아키텍처

분산 컴포넌트(distributed component) 아키텍처

서비스 지향(service-oriented) 아키텍처

피어 투 피어(peer-to-peer) 아키텍처

 

10. 다음 자바 코드에서 오류가 발생하는 문장은?

abstract class Shape {
 public void paint() { draw(); }
 abstract public void draw();
}
abstract class Circle extends Shape {
 public int radius;
 public Circle(int radius) {
  this.radius = radius; }
 double getArea() {
  return (3.14 * radius * radius); }
}
public class NamedCircle extends Circle {
 String name;
 public NamedCircle(int radius, String name) {
  super(radius);
  this.name = name;
 }
 public void draw() { 
 System.out.println("반지름이 " + radius + "인 원을 그리다.");
 }
 public static void main(String[] args) {
  Shape s;
  s = new Shape();
  NamedCircle w = new NamedCircle(5, "Ring");
  System.out.println(w.getArea());
  w.draw();
 }
}

super(radius); - 사용

Shape s; -> 추상클래스를 바로 쓰면 안되지 않나? 되나봄ㅎ

s = new Shape(); -> NameCircle(); 추상클래스 생성자는 사용 가능하지 않나?

System.out.println(w.getArea()); - 상속받았으니까 사용

 

11. 코드 인스펙션(code inspection)에 대한 설명으로 옳지 않은 것은?

품질 보증 활동으로 인식한다.

동적(dynamic) 테스트의 하나이다.

회의 전에 프로그램 코드, 분석, 설계 등의 문서를 배포한다.

검사 팀은 관련 전문가로 이루어지며 검사목록(checklist)을 제공한다.

 

12. 다음 설명과 용어를 바르게 연결한 것은?

()코드만 남아있고 관련 문서가 없을 때, 프로그램을 분석하여 프로그램 구조, 자료 구조, 모듈 사이의 관계 등 상세한 설계 정보를 추출함
()겉으로 보이는 동작이나 외부 행위를 바꾸지 않고 소프트웨어 내부 구조를 바꾸며 점진적으로 설계를 향상시키는 기법
()기존 시스템을 이해하여 새로운 기능을 추가하거나 성능을 향상시키는 등의 새로운 형태로 변경하는 것으로, 단순히 설계정보를 끌어내는 것뿐만 아니라 이 정보를 사용하여 보다 나은 시스템을 만드는 것

() () ()

역공학 리팩토링 재공학

역공학 프로토타이핑 재공학

재공학 리팩토링 역공학

재공학 프로토타이핑 역공학

 

13. UML 다이어그램에 대한 설명으로 옳지 않은 것은?

상태 다이어그램(state diagram)은 객체의 상태 변화를 나타낸다.

클래스 다이어그램(class diagram)은 클래스와 클래스 사이의 관계를 나타내는 정적인 모델이다.

컴포넌트 다이어그램(component diagram)은 물리적인 노드와 커뮤니케이션 경로를 각각 육면체와 선으로 표시한다.

활동 다이어그램(activity diagram)은 업무의 흐름을 표현하거나 유스케이스의 구체적인 흐름을 나타내기 위해 사용한다.

...
 

# 자료구조론

1. 다음 탐색 알고리즘에 대한 설명으로 옳지 않은 것은?

int a_search(int list[], int key, int n) {
 int i;
 for(i=0; i<n; i++)
  if(list[i]==key) return i;
   return -1;
}

탐색에 성공하면 키 값의 인덱스를 반환한다.

최선의 경우, 시간 복잡도는 빅오 표기법으로 O(1)이다.

최악의 경우, 시간 복잡도는 빅오 표기법으로 O(n).

평균적인 경우, 시간 복잡도는 빅오 표기법으로 O((n1)/2)이다.

 

2. 다음 C 코드의 실행 결과는?

#include <stdio.h>
int func (int n) {
 if(n <= 1) return 2;
  return func (n-1) + n;
}

int main (int argc, char* argv[]) {
 printf("%d\n", func (10) );
 return 0;
}

55 56 58 60

 

3. 다음 그래프에 대해 위상 정렬(topological sort) 알고리즘수행했을 때 생성되는 위상 순서 중 옳지 않은 것은?

0, 1, 2, 3, 4, 5, 6

0, 1, 3, 2, 4, 5, 6

③ 0, 2, 4, 5, 1, 3, 6

0, 2, 5, 1, 3, 4, 6

 

 

4. 다음과 같이 배열을 이용하여 스택 자료구조를 정의하였다. , 에 들어갈 내용을 바르게 연결한 것은?

 

#define MAX 10
int stack[MAX];
int top = -1;
int push(int t) {
 if (top >= MAX - 1) {
  printf("\n Stack overflow.");
  return -1;
 }
 stack[ ] = t;
 return t;
}
int pop(void) {
 if (top < 0) {
  printf("\n Stack underflow.");
  return -1;
 }
 return stack[ ];
}

++top --top

++top top--

top++ --top

top++ top--

 

5. 차수가 4이고 높이가 4m원 탐색 트리가 가질 수 있는 노드의 최대 수는? (, 루트 노드만 있는 경우 트리의 높이는 1이다)

21

51

③ 85

255

 

6. 다음은 이진트리를 전위 순회하여 얻어진 전위표기식이다. 이 트리에 대한 설명으로 옳지 않은 것은?

/ * 6 2 3 1 * 5 8 7 4

연산식의 최종 결과는 45이다.

트리로 재구성하면 루트 노드는 이다.

트리로 재구성하여 중위 순회하면 6*2/3158*74이다.

트리로 재구성하여 후위 순회하면 62*31/5874*이다.

 

7. 이진트리의 성질에 대한 설명으로 옳은 것은?    (1)

 

8. 다음 C 언어 코드를 실행한 후 5번째 및 7번째 줄에 출력되는 문장으로 옳은 것은?

#include <stdio.h>


void hanoi(int n, char from, char tmp, char to) {
 if( n==1 )
  printf("disk 1 from %c to %c\n", from, to);
 else {
  hanoi(n-1, from, to, tmp);
  printf("disk %d from %c to %c\n", n, from, to);
  hanoi(n-1, tmp, from, to);
 }
}


int main(int argc, char* argv[]) {
 hanoi(3, 'A', 'B', 'C');
}

5번째 줄 7번째 줄

① disk 1 from B to A disk 1 from A to C

disk 1 from C to B disk 2 from B to C

disk 2 from A to B disk 3 from A to C

disk 3 from A to C disk 2 from B to C

 

9. 다음과 같이 이중연결리스트를 이용하여 큐 자료구조를 정의하였다. add는 큐의 삽입 알고리즘이고, delete는 큐의 삭제 알고리즘이다. , 에 들어갈 내용을 바르게 연결한 것은? -4

typedef struct _dnode {
 int key;
 struct _dnode *prev, *next;
} dnode;
dnode *head = (dnode*)malloc(sizeof(dnode));
dnode *tail = (dnode*)malloc(sizeof(dnode));
head->prev = head; head->next = tail;
tail->prev = head; tail->next = tail;


int add(int k) {
 dnode *t = (dnode*)malloc(sizeof(dnode));
 if (t == NULL) {
  printf("\n Out of memory.");
  return -1;
 }
 t->key = k;
 ㉠
 tail->prev = t; t->next = tail;
 return k;
}


int delete(void) {
 dnode *t; int i;
 t = head->next;
 if (t == tail) {
 printf("\n Queue underflow.");
 return -1;
 }
 i = t->key;
  ㉡
 free(t); return i;
}

tail->prev = t; t->prev = tail->prev;

    ㉡ head->next = t->next; t->next->prev = head;

tail->prev->next = t; t->prev = tail->prev->next;

    ㉡ head->next = t->next; t->next->prev = head;

tail->prev->next = t; t->prev = tail->prev;

    ㉡ head->next = t->next; t->next = head;

tail->prev->next = t; t->prev = tail->prev;

    ㉡ head->next = t->next; t->next->prev = head;

 

10. 다항식에서 하나의 항을 표현하기 위해 다음과 같은 구조체 poly정의하였다. ?? (2)

 

11. 다음은 행렬 연산을 하는 C 코드와 transpose함수 호출 후 행렬의 상태이다. 에 들어갈 코드로 옳은 것은?

#include <stdio.h>
#define R 3
#define C 3
void transpose(int A[R][C], int B[R][C]) {
 for(int r = 0; r < R; r++)
  for(int c = 0; c < C; c++)
   
}
int main(int argc, char* argv[]) {
 int array1[R][C] = {{1,2,3},{4,5,6},{7,8,9}};
 int array2[R][C] = {0};
 transpose(array1, array2);
 return 0;
}
transpose함수 호출 후 행렬의 상태:
array1: 1 2 3
4 5 6
7 8 9
array2: 1 4 7
2 5 8
3 6 9

A[c][r] = B[c][r];

B[c][r] = A[c][r];

A[c][r] = B[r][c];

B[c][r] = A[r][c];

 

12. 열 우선(column major) 순서로 저장되는 3차원 배열 student[2][3][4]가 있을 때, 첫 번째 원소인 student[0][0][0]의 주소가 1024이면 student[1][2][2]의 주소는? (, 배열 student의 각 원소의 크기는 24byte이고, 저장 순서는 [0][0][0],,[0][2][3],[1][0][0],,[1][2][3] 순서로 저장한다) -3 대충계산한게 1408.. 왜 1504지?

1168 1192 1504 1528

 

13. 다음 C 코드에서 함수 AB는 최대 공약수를 구하는 함수이다. 함수 B가 함수 A와 같은 결과를 출력하도록 , 에 들어갈 내용을 바르게 연결한 것은?

int A(int x, int y){
 int r;
 while (y != 0){
  r = x % y; x = y; y = r;
 }
 return x;
}


int B(int x, int y) {
 int r;
 if ( ) return x;
 else {
  r = x % y;
  return
 }
}

y==0 B(y, r);

y==0 B(r, y);

y!=0 B(y, r);

y!=0 B(r, y);

 

14. C 언어에서 배열과 연결리스트에 대한 설명으로 옳지 않은 것은?

일반적으로 두 개의 정수형 데이터 세트 {1,2,3}{4,5,6,7,8}합병하여 {1,2,3,4,5,6,7,8}로 만드는 연산을 수행할 경우, 두 데이터 세트의 자료구조를 연결리스트로 만들면, 정수형 배열로 만드는 것보다 시간 복잡도를 낮게 구현할 수 있다.

일반적으로 정수형 데이터 세트 {1,2,3,4}{4,1,2,3}으로 변경하는 연산을 수행할 경우, 해당 데이터 세트의 자료구조를 연결리스트로 만들면, 정수형 배열로 만드는 것보다 더 빠르게 수행시킬 수 있다.

③ 일반적으로 정수형 데이터 세트 {1,2,3,4}를 {2,3,4,5}로 각 요소에 +1 연산을 수행할 경우, 데이터 세트의 자료구조를 연결리스트로 만들면, 정수형 배열로 만드는 것보다 메모리를 적게 차지한다.

일반적으로 정수형 데이터 세트 {1,2,3,4}{0,1,2,3,4}로 새로운 값을 추가하는 연산을 수행할 경우, 데이터 세트의 자료구조를 연결리스트로 만들면, 정수형 배열로 만드는 것보다 더 빠르게 연산을 수행시킬 수 있다.

 

 

15. 다음은 기수정렬 알고리즘이다. 이 두 번 실행된 후의 결과로 옳은 것은?


<조 건>


LSD(Least Significant Digit)는 가장 낮은 자릿수이고, MSD(Most Significant Digit)는 가장 높은 자릿수이다.
  135
의 경우 LSD 위치의 값은 5이고 MSD 위치의 값은 1이다.

버킷은 10개 큐로 구현한다.
list는 배열로 구현하며 초깃값은 (437, 125, 85, 7, 632, 194)이고 n6이다.
RadixSort(list, n) {
 for(d LSD의 위치에서 MSD위치로 한 자리씩 이동){
  for(i list0번째 원소부터 n-1까지 반복){
   listi번째 원소를 d의 위칫값에 따라 0번부터 9번 사이의 버킷에 삽입한다.
  }
  for(b 0번 버킷부터 9번 버킷까지 반복){
   b번째 버킷에서 원소들을 순차적으로 읽어서 list재배정한다.
  }
  ㉠list의 원소를 순서대로 출력한다.
 }
}

7 85 125 194 437 632

② 7 125 632 437 85 194

632 194 125 85 437 7

632 194 125 437 85 7

 

16. 데이터 <1, 3, 5, 7, 8, 10, 9>를 차례대로 하나씩 입력받아 이진 탐색 트리AVL 트리를 각각 만들었을 때, 두 트리 간의 높이 차는?

1

2

3

④ 4

 

17. 초기 빈 상태의 트리에 다섯 개의 키 <1, 5, 3, 2, 6>를 차례대로 입력받아 디지털 탐색 트리를 만든 후, 전위 순회한 결과로 옳은 것은? (, 각 키는 3비트 이진수로 표현한다)

① 1, 3, 2, 5, 6

1, 3, 5, 2, 6

1, 5, 2, 6, 3

1, 5, 3, 2, 6

 

18. 입력받은 수식의 괄호쌍이 맞는지 스택 S를 이용하여 판단하는 알고리즘 DDD를 작성하였다. 수식에 존재하는 괄호는 소괄호 ‘()’이며, 다른 괄호는 수식에 존재하지 않는다. 수식의 길이는 n이며, 배열 X에 저장되어 입력된다. 알고리즘 DDDX를 입력받아 X에 저장된 수식의 괄호쌍이 맞으면 true, 그렇지 않으면 false를 반환하는 함수이다. 에 들어갈 코드를 바르게 연결한 것은?

return true / return true / return false

② return false return true return false

return true return false return true

return false return false return true

 

19. 다음과 같은 2-3-4 트리에 키 67을 차례로 삽입한 이후의 트리 상태에 대한 설명으로 옳은 것은?

2노드 1, 3노드 1, 4노드 2개로 구성된다.

루트 노드는 4노드이다.

③ 가장 왼쪽의 리프 노드는 4-노드이다.

가장 오른쪽의 리프 노드는 4노드이다.

 

 

20. 다음 행렬은 그래프(graph)를 인접 행렬(adjacency matrix)나타낸 것이다. 이 그래프에서 솔린 알고리즘(Sollin algorithm)이용하여 최소 비용 신장 트리(minimum spanning tree)를 찾고자 한다. 알고리즘 수행 과정에서 나타나는 부분 그래프에 해당하지 않는 것은? (, 부분 그래프는 간선의 집합으로 표현하며, 간선은 그래프에 포함된 두 정점 v, k에 대응하여 (v, k)의 형태로 표현한다)

 

정점 0 1 2 3 4 5 6
0 0 20 15 8
1 20 0 5 12
2 15 5 0 25 35 28 6
3 12 25 0 7
4 35 7 0 11
5 8 28 0 9
6 6 11 9 0

{ (0, 5) }

② { (1, 3), (3, 4) }

{ (3, 4) }

{ (1, 2), (2, 6) }

 

21. 다음은 방향그래프를 인접 리스트로 표현한 것이다. 이 그래프에 대한 설명으로 옳지 않은 것은?

모든 사이클 경로는 (0,3,0), (2,4,2), (0,1,3,0), (1,2,4,1), (1,3,4,1), (0,2,4,1,3,0)이고, 그 경로에 각각 대응하는 길이는 2, 2, 3, 3, 3, 5이다.

각 정점(0,1,2,3,4,5)에 각각 대응되는 진입차수는 1, 2, 3, 2, 3, 0이다.

각 정점(0,1,2,3,4,5)에 각각 대응되는 인접한 정점의 집합은 {1,2}, {2,3}, {4}, {0,4}, {1,2}, {4,2}이다

각 정점(0,1,2,3,4,5)에서 각각 대응되는 진출차수는 3, 2, 1, 2, 2, 1이다.

 

 

22. 승자 트리는 단말 노드(leaf node)에서부터 시작해서, 가장 작은 키 값을 갖는 노드(승자)를 찾아 부모로 올려서 루트 노드로부터 가장 작은 값을 찾아내는 방식이다. 승자 트리의 단말 노드에는 정렬된 배열(run)이 각각 달려 있고, run에서 첫 번째 값을 읽어 가장 작은 값을 올려 내는 방식으로 모든 run을 비우면서 값을 정렬하게 된다. 8개의 run이 있는 아래 승자 트리에서 6, 8, 9 순서대로 3개의 레코드를 출력하고 난 뒤 run이 생략된 승자 트리의 형태로 옳은 것은? (4) ?!

 

 

23. 다음 코드는 C 언어를 이용하여 주어진 연결 리스트 구조데이터에 대한 삽입 정렬 함수를 구현한 것이다. 에 들어갈 코드를 바르게 연결한 것은?

typedef struct _node {
 int data;
 struct _node *next;
}node;


void Insert(node **headRef, node *newNode) {
 if (*headRef == NULL || (*headRef)->data >= newNode->data) {
  newNode->next = *headRef;
  *headRef = newNode;
 }
 else {
  node *current = *headRef;
  while (current->next != NULL &&  current->next->data < newNode->data){
   ㉠
  }
  ㉡
  ㉢
 }
}


void Sort(node **headRef) {
 node *result = NULL, *current = *headRef;
 node *next;
 while (current!=NULL) {
  ㉣
  Insert(&result, current);
  ㉤
 }
 *headRef = result;
}
A : current->next = current;
B : current = current->next;
C : current->next = newNode;
D : next = current->next;
E : current->next = next;
F : current = next;
G : newNode->next = current->next;

A D E F G

② B G C D F

C E B A D

E G B F A

 

24. 단순 무방향 그래프(simple undirected graph) G가 주어졌을 때, 정점(vertex)의 중복 방문을 허용하되, 간선(edge)의 중복은 허용하지 않는 경로(path)를 트레일(trail)이라고 한다. 그래프의 모든 간선들을 단 한 번씩만 통과하되 출발점과 도착점이 일치하지 않는 것을 오일러 트레일(Euler trail)이라고 할 때, 다음 그래프 중에서 오일러 트레일이 존재하지 않는 그래프는? -2 (1)

 

25. 비어 있는 레드-블랙(red-black) 트리<19, 18, 2, 15, 6, 13, 7>을 순서대로 입력한 결과 생성되는 레드-블랙 트리로 옳은 것은? (, 점선 노드는 레드 노드, 점선 링크는 레드 링크이며, 실선 노드는 블랙 노드, 실선 링크는 블랙 링크이고, 리프 노드에 연결된 사각형의 단말은 외부 노드를 의미한다) (4)

728x90
반응형

관련글 더보기