문항별 문제·해설 20문항
문제 01기억장치 계층 구조
기억장치를 접근 속도가 빠른 것부터 순서대로 바르게 나열한 것은?
- ①캐시 → 레지스터 → 주기억장치정답
- ②레지스터 → 캐시 → 주기억장치정답
- ③레지스터 → 주기억장치 → 캐시정답
- ④주기억장치 → 캐시 → 레지스터정답
1번 정답·해설 펼치기1번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. 기억장치 계층 구조에서 CPU 내부에 있는 레지스터가 가장 빠르고, CPU와 주기억장치 사이의 속도 차이를 줄이기 위한 캐시가 그다음이며, 주기억장치(RAM)가 그 뒤를 잇습니다. 보조기억장치는 가장 느립니다. 속도가 빠를수록 용량은 작고 비트당 가격은 비쌉니다.
보기별 검토
① 캐시를 레지스터보다 빠르다고 하여 틀렸습니다.
② 레지스터 → 캐시 → 주기억장치의 순서와 일치하므로 옳습니다.
③ 캐시를 주기억장치보다 느리다고 하여 틀렸습니다.
④ 순서를 거꾸로 나열하여 틀렸습니다.
풀이 요령 · 관련 개념
풀이 요령: 기억장치 피라미드는 「레지스터 → 캐시 → 주기억장치 → 보조기억장치」입니다. 위로 갈수록 빠르고 작고 비싸며, CPU에 가까울수록 빠르다고 기억합니다.
문제 02데이터 표현 단위
CPU의 연산을 처리하기 위한 데이터의 기본 단위로서 CPU가 한 번에 처리할 수 있는 데이터 크기를 나타내는 것은?
- ①비트(bit)정답
- ②바이트(byte)정답
- ③워드(word)정답
- ④니블(nibble)정답
2번 정답·해설 펼치기2번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. 워드(word)는 CPU가 한 번에 처리할 수 있는 데이터의 크기로, 레지스터의 크기나 데이터 버스의 폭과 관련됩니다. 32비트 CPU의 워드는 32비트, 64비트 CPU의 워드는 64비트입니다.
보기별 검토
① 비트는 0 또는 1을 나타내는 정보의 최소 단위입니다.
② 바이트는 8비트로, 문자 하나를 표현하는 기본 단위이자 주소 지정의 단위입니다.
③ CPU의 처리 단위이므로 옳습니다.
④ 니블은 4비트로, 16진수 한 자리를 표현합니다.
풀이 요령 · 관련 개념
풀이 요령: 단위 크기는 「비트(1) < 니블(4) < 바이트(8) < 워드(CPU마다 다름)」입니다. 「CPU가 한 번에 처리」라는 말이 나오면 워드입니다.
문제 03머신러닝의 유형
특정 환경에서 선택 가능한 행동들 중 보상(reward)을 최대화하는 행동을 선택하는 머신러닝(machine learning) 기법은?
- ①지도 학습(supervised learning)정답
- ②강화 학습(reinforcement learning)정답
- ③비지도 학습(unsupervised learning)정답
- ④준지도 학습(semi-supervised learning)정답
3번 정답·해설 펼치기3번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. 강화 학습은 에이전트가 환경과 상호작용하며 행동을 하고, 그 결과로 받는 보상이 최대가 되도록 행동 정책을 학습하는 기법입니다. 바둑·게임 인공지능, 로봇 제어 등에 활용됩니다.
보기별 검토
① 지도 학습은 입력과 정답(레이블)이 짝지어진 데이터로 학습하여 분류·회귀를 수행합니다.
② 보상을 최대화하는 행동을 학습하므로 옳습니다.
③ 비지도 학습은 정답 없이 데이터의 구조나 패턴을 찾는 기법으로, 군집화가 대표적입니다.
④ 준지도 학습은 일부만 레이블이 있는 데이터를 함께 이용해 학습합니다.
풀이 요령 · 관련 개념
풀이 요령: 「정답이 있으면 지도, 없으면 비지도, 일부만 있으면 준지도, 보상이 있으면 강화」로 학습 데이터의 형태로 구분합니다.
문제 042의 보수 연산
10진수 연산 (-25 + 4)를 2의 보수를 이용하여 계산한 결과를 2진수로 표현한 것은? (단, 저장 공간은 8비트로 한다)
- ①00010101정답
- ②10010101정답
- ③11101010정답
- ④11101011정답
4번 정답·해설 펼치기4번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ④입니다. −25 + 4 = −21이므로 −21을 8비트 2의 보수로 나타내면 됩니다. 21은 00010101이고, 모든 비트를 반전하면 11101010(1의 보수), 여기에 1을 더하면 11101011입니다. 직접 계산해도 −25 = 11100111, 4 = 00000100이고 합은 11101011로 같습니다.
보기별 검토
① 00010101은 +21입니다.
② 10010101은 부호와 절댓값 방식으로 −21을 나타낸 것입니다.
③ 11101010은 −21의 1의 보수 표현입니다.
④ −21의 2의 보수 표현이므로 옳습니다.
풀이 요령 · 관련 개념
풀이 요령: 2의 보수는 「반전 후 +1」 또는 「오른쪽부터 처음 나오는 1까지는 그대로, 그 왼쪽은 반전」으로 빠르게 구합니다. 00010101 → 11101011이 바로 나옵니다.
문제 05네트워크 관리 프로토콜
네트워크 시스템을 관리하기 위한 UDP 기반의 프로토콜은?
- ①SNMP정답
- ②SMTP정답
- ③ICMP정답
- ④RARP정답
5번 정답·해설 펼치기5번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ①입니다. SNMP(Simple Network Management Protocol)는 라우터, 스위치, 서버 같은 네트워크 장비의 상태를 감시하고 설정을 관리하는 응용 계층 프로토콜이며, 전송 계층으로 UDP(포트 161, 트랩 162)를 사용합니다.
보기별 검토
① UDP 기반의 네트워크 관리 프로토콜이므로 옳습니다.
② SMTP는 전자우편을 전송하는 프로토콜로 TCP 25번 포트를 사용합니다.
③ ICMP는 IP 계층에서 오류 보고와 진단(ping 등)을 담당하며 UDP를 쓰지 않습니다.
④ RARP는 MAC 주소로 IP 주소를 알아내는 프로토콜로 네트워크 관리 프로토콜이 아닙니다.
풀이 요령 · 관련 개념
풀이 요령: UDP를 쓰는 대표 응용 프로토콜은 「DNS(질의), DHCP, SNMP, TFTP」입니다. 관리(Management)라는 말이 들어간 SNMP를 고르면 됩니다.
문제 06시프트 연산
레지스터에 저장된 10진수 정수 29를 2비트만큼 논리적 우측 시프트(logical right shift)한 결과에 해당하는 10진수의 값은?
- ①4정답
- ②7정답
- ③8정답
- ④15정답
6번 정답·해설 펼치기6번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. 29를 2진수로 나타내면 11101입니다. 논리적 우측 시프트를 2비트 하면 오른쪽 두 비트(01)가 버려지고 왼쪽에는 0이 채워져 00111, 즉 10진수 7이 됩니다. 우측 시프트 1비트는 2로 나누고 나머지를 버리는 것과 같으므로 29 ÷ 4 = 7.25에서 소수점 아래를 버린 7과 같습니다.
보기별 검토
① 4는 3비트 시프트(29 ÷ 8)의 결과입니다.
② 2비트 시프트의 결과이므로 옳습니다.
③ 8은 시프트 결과로 나올 수 없는 값입니다.
④ 15는 1비트 시프트의 결과(29 ÷ 2의 몫 14)와도 다른 값입니다.
풀이 요령 · 관련 개념
풀이 요령: 양수의 우측 시프트 k비트는 「2^k로 나눈 몫」입니다. 2진 변환 없이 29 ÷ 4의 몫 7로 바로 답할 수 있습니다.
문제 07소프트웨어 개발 모델
다음 설명에 해당하는 소프트웨어 개발 프로세스 모델은?
초기 요구분석 후 프로토타입을 개발하기 이전에 위험 분석 단계를 거친다. 이렇게 만들어진 프로토타입을 사용자가 평가하고, 개발자는 추가 요구사항을 반영하여 다시 위험 분석을 거쳐 2차 프로토타입을 만든다. 이 과정을 반복하면서 사용자의 요구사항이 충분히 반영된 최종 제품을 완성해 나간다.
- ①나선형 모델정답
- ②폭포수 모델정답
- ③CBD 모델정답
- ④SPICE 모델정답
7번 정답·해설 펼치기7번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ①입니다. 나선형 모델은 계획 수립 → 위험 분석 → 개발(프로토타입) → 고객 평가의 단계를 나선처럼 반복하며 점진적으로 완성도를 높이는 모델입니다. 반복마다 위험 분석을 거친다는 점이 가장 큰 특징이어서 대규모·고위험 프로젝트에 적합합니다.
보기별 검토
① 반복적 위험 분석과 프로토타입 평가가 특징이므로 옳습니다.
② 폭포수 모델은 요구분석부터 유지보수까지 단계를 순차적으로 한 번씩 진행하며, 이전 단계로 돌아가기 어렵습니다.
③ CBD(컴포넌트 기반 개발)는 재사용 가능한 컴포넌트를 조립해 소프트웨어를 만드는 방법입니다.
④ SPICE는 개발 모델이 아니라 소프트웨어 프로세스의 능력 수준을 평가하는 국제 표준(ISO/IEC 15504)입니다.
풀이 요령 · 관련 개념
풀이 요령: 「위험 분석 + 반복」이 함께 나오면 나선형 모델입니다. 프로토타입만 강조하면 프로토타이핑 모델, 순차 진행이면 폭포수 모델로 구분합니다.
문제 08메모리의 종류
메모리에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 플래시 메모리는 NAND형과 NOR형이 있다.
ㄴ. SRAM은 DRAM에 비해 접근 속도가 빠른 편이다.
ㄷ. ROM은 휘발성 메모리로 전원 없이 데이터를 유지할 수 없다.
ㄹ. EPROM은 자외선 등을 사용하여 여러 번 저장된 내용을 지우고 다른 내용을 기록할 수 있다.
- ①ㄱ, ㄴ정답
- ②ㄴ, ㄷ정답
- ③ㄷ, ㄹ정답
- ④ㄱ, ㄴ, ㄹ정답
8번 정답·해설 펼치기8번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ④입니다. 플래시 메모리는 셀 연결 방식에 따라 대용량 저장에 유리한 NAND형과 임의 접근 읽기에 유리한 NOR형으로 나뉩니다(ㄱ). SRAM은 플립플롭으로 구성되어 재충전이 필요 없고 DRAM보다 빠르므로 캐시에 쓰입니다(ㄴ). EPROM은 자외선을 쬐어 내용을 지우고 다시 기록할 수 있습니다(ㄹ).
보기별 검토
① ㄹ도 옳으므로 부족합니다.
② ㄷ은 틀렸습니다. ROM은 비휘발성 메모리로 전원이 없어도 데이터를 유지합니다.
③ ㄷ을 포함하여 틀렸습니다.
④ ㄱ, ㄴ, ㄹ이 옳으므로 정답입니다.
풀이 요령 · 관련 개념
풀이 요령: 「RAM = 휘발성, ROM·플래시 = 비휘발성」, 「SRAM = 빠름·비쌈·캐시, DRAM = 느림·저렴·주기억장치·재충전 필요」, 「PROM 1회, EPROM 자외선, EEPROM 전기로 소거」로 정리합니다.
문제 09응집도와 결합도
모듈의 응집도(cohesion) 및 결합도(coupling)에 대한 설명으로 옳지 않은 것은?
- ①한 모듈이 다른 모듈 내부를 직접 참조하는 경우는 내용(content) 결합도에 해당한다.정답
- ②응집도는 하나의 모듈 내에서 구성 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.정답
- ③모듈을 구성하는 한 요소의 출력이 다음 요소의 입력으로 사용되는 경우는 순차적(sequential) 응집도에 해당한다.정답
- ④레코드, 구조체 또는 객체와 같은 복잡한 데이터 구조를 모듈 인터페이스를 통해 주고받는 경우는 데이터(data) 결합도에 해당한다.정답
9번 정답·해설 펼치기9번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ④입니다. 레코드, 구조체, 객체처럼 복잡한 자료구조를 인터페이스로 주고받는 경우는 스탬프(stamp) 결합도입니다. 데이터 결합도는 정수나 문자처럼 필요한 단순 데이터만 매개변수로 주고받는 가장 바람직한 결합도입니다.
보기별 검토
① 다른 모듈의 내부 데이터나 코드를 직접 참조·변경하는 것은 가장 나쁜 내용 결합도입니다. 옳습니다.
② 응집도는 모듈 내부 구성 요소들의 기능적 관련 정도를 나타냅니다. 옳습니다.
③ 한 요소의 출력이 다음 요소의 입력이 되는 경우는 순차적 응집도입니다. 옳습니다.
④ 스탬프 결합도를 데이터 결합도라고 하여 틀렸습니다.
풀이 요령 · 관련 개념
풀이 요령: 결합도는 약한 것부터 「데이터 → 스탬프 → 제어 → 외부 → 공통 → 내용」, 응집도는 강한 것부터 「기능적 → 순차적 → 교환적 → 절차적 → 시간적 → 논리적 → 우연적」입니다. 좋은 설계는 응집도는 높게, 결합도는 낮게입니다.
문제 10C 포인터와 재귀
다음 C 프로그램의 출력 결과는?
#include <stdio.h>
void func(int *p, int *q) {
if (p > q) return;
printf("%d ", *p + *q);
func(p + 1, q - 1);
}
int main(void) {
int a[] = { 3, 1, 4, 1, 5 };
func(a, a + 4);
return 0;
}
- ①6 2 8정답
- ②8 2 6정답
- ③8 2 8정답
- ④8 8 2정답
10번 정답·해설 펼치기10번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. func(a, a + 4)에서 p는 a[0], q는 a[4]를 가리킵니다. 첫 호출은 3 + 5 = 8을 출력하고 func(a + 1, a + 3)을 부릅니다. 두 번째 호출은 a[1] + a[3] = 1 + 1 = 2를 출력하고 func(a + 2, a + 2)를 부릅니다. 세 번째 호출은 p와 q가 같은 위치이므로 p > q가 아니어서 a[2] + a[2] = 4 + 4 = 8을 출력합니다. 그다음 p = a + 3, q = a + 1이 되어 p > q이므로 종료합니다. 출력은 8 2 8입니다.
보기별 검토
① 첫 값을 3 + 3 등으로 잘못 계산한 결과입니다.
② 마지막 호출(가운데 원소 4 + 4)을 6으로 잘못 계산한 결과입니다.
③ 8 2 8이므로 옳습니다.
④ 호출 순서를 잘못 추적한 결과입니다.
풀이 요령 · 관련 개념
풀이 요령: 양 끝에서 안쪽으로 좁혀 오는 재귀는 「p와 q가 만나는 가운데 원소도 한 번 처리되는지」를 종료 조건(p > q)으로 반드시 확인합니다.
문제 11데이터베이스 뷰
데이터베이스 뷰(view)에 대한 설명으로 옳지 않은 것은?
- ①뷰를 이용하여 다른 뷰를 정의할 수 있다.정답
- ②뷰를 제거할 때는 DELETE VIEW 명령을 사용한다.정답
- ③뷰는 다른 테이블에서 유도된 가상 테이블이다.정답
- ④뷰를 이용하여 사용자별로 필요한 데이터만 선별하여 보여줄 수 있다.정답
11번 정답·해설 펼치기11번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. 뷰는 CREATE VIEW로 정의하고 DROP VIEW로 제거합니다. DELETE는 테이블의 행을 삭제하는 데이터 조작어이며, 뷰 객체 자체를 없애는 명령이 아닙니다.
보기별 검토
① 이미 정의된 뷰를 기반으로 다른 뷰를 정의할 수 있습니다. 옳습니다.
② 제거 명령을 DELETE VIEW라고 하여 틀렸습니다.
③ 뷰는 기본 테이블이나 다른 뷰에서 유도된, 물리적으로 저장되지 않는 가상 테이블입니다. 옳습니다.
④ 뷰를 이용하면 사용자에게 필요한 열과 행만 보여줄 수 있어 보안과 편의성을 높입니다. 옳습니다.
풀이 요령 · 관련 개념
풀이 요령: 객체를 만들고 없애는 것은 DDL(CREATE·DROP·ALTER), 데이터 행을 다루는 것은 DML(INSERT·DELETE·UPDATE)입니다. 「객체 + DELETE」 조합은 틀린 표현입니다.
문제 12소수의 진법 변환
2진 소수로 변환하면 무한 순환 소수가 되는 10진 소수는?
- ①0.25정답
- ②0.375정답
- ③0.4정답
- ④0.5정답
12번 정답·해설 펼치기12번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. 10진 소수가 2진 유한 소수가 되려면 분모가 2의 거듭제곱인 분수로 나타낼 수 있어야 합니다. 0.4 = 2/5는 분모에 5가 있으므로 2진수로 바꾸면 0.0110 0110 …처럼 0110이 무한히 반복됩니다.
보기별 검토
① 0.25 = 1/4이므로 2진수 0.01로 유한합니다.
② 0.375 = 3/8이므로 2진수 0.011로 유한합니다.
③ 0.4 = 2/5이므로 무한 순환 소수가 됩니다.
④ 0.5 = 1/2이므로 2진수 0.1로 유한합니다.
풀이 요령 · 관련 개념
풀이 요령: 기약분수로 만든 뒤 분모가 2의 거듭제곱(2, 4, 8, 16 …)인지 봅니다. 분모에 5나 3 같은 다른 소인수가 남으면 2진수에서 무한 소수가 됩니다. 컴퓨터에서 0.1이 정확히 표현되지 않는 이유와 같습니다.
문제 13함수 종속
다음 릴레이션에서 속성 A~D의 함수 종속을 화살표(→)로 표현할 때 옳은 것은? (단, 아래 투플을 기준으로 판단하며, 새로운 투플은 추가되지 않는다고 가정한다)
| A | B | C | D |
|---|---|---|---|
| 1 | 2 | 7 | 7 |
| 2 | 8 | 5 | 6 |
| 2 | 6 | 5 | 6 |
| 4 | 8 | 7 | 2 |
- ①A → B정답
- ②B → C정답
- ③{A, D} → B정답
- ④{C, D} → A정답
13번 정답·해설 펼치기13번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ④입니다. X → Y가 성립하려면 X 값이 같은 투플은 반드시 Y 값도 같아야 합니다. {C, D}의 값은 (7, 7), (5, 6), (5, 6), (7, 2)이고, 같은 값 (5, 6)을 가진 두 투플의 A가 모두 2이므로 {C, D} → A가 성립합니다.
보기별 검토
① A = 2인 두 투플의 B가 8과 6으로 달라 A → B는 성립하지 않습니다.
② B = 8인 두 투플의 C가 5와 7로 달라 B → C는 성립하지 않습니다.
③ {A, D} = (2, 6)인 두 투플의 B가 8과 6으로 달라 성립하지 않습니다.
④ 같은 {C, D} 값에 대해 A가 항상 같으므로 옳습니다.
풀이 요령 · 관련 개념
풀이 요령: 결정자 쪽 값이 겹치는 투플 쌍부터 찾습니다. 이 표에서는 2행과 3행이 A·C·D가 같고 B만 다르므로, B를 종속자로 하는 선지는 모두 탈락하고 B를 포함하지 않는 ④만 남습니다.
문제 14FIFO 페이지 교체
FIFO 페이지 교체 알고리즘을 사용하는 가상메모리에서 프로세스 P가 다음과 같은 페이지 번호 순서대로 페이지에 접근할 때, 페이지 부재(page-fault) 발생 횟수는? (단, 프로세스 P가 사용하는 페이지 프레임은 총 3개이고, 빈 상태에서 시작한다)
8 1 2 3 1 4 5 3 4 1 4 3
- ①6회정답
- ②7회정답
- ③8회정답
- ④9회정답
14번 정답·해설 펼치기14번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. 프레임 3개로 추적하면 8(부재) [8], 1(부재) [8, 1], 2(부재) [8, 1, 2], 3(부재, 8 교체) [1, 2, 3], 1(적중), 4(부재, 1 교체) [2, 3, 4], 5(부재, 2 교체) [3, 4, 5], 3(적중), 4(적중), 1(부재, 3 교체) [4, 5, 1], 4(적중), 3(부재, 4 교체) [5, 1, 3]입니다. 부재는 8, 1, 2, 3, 4, 5, 1, 3에서 모두 8회입니다.
보기별 검토
① 6회는 마지막 두 번의 부재를 빠뜨린 값입니다.
② 7회는 마지막 접근(3)의 부재를 빠뜨린 값입니다.
③ 8회이므로 옳습니다.
④ 9회는 적중을 부재로 잘못 센 값입니다.
풀이 요령 · 관련 개념
풀이 요령: FIFO는 「가장 먼저 들어온 페이지」를 내보내며, 적중해도 순서가 바뀌지 않는다는 점이 LRU와 다릅니다. 프레임 내용을 큐처럼 왼쪽에서 빼고 오른쪽에 넣으며 적어 가면 실수가 줄어듭니다.
문제 15IPv4 주소 클래스
IPv4 주소의 첫 번째 바이트와 각 바이트에 해당하는 클래스가 옳게 짝지어지지 않은 것은?
- ①00010011 - Class C정답
- ②01001010 - Class A정답
- ③10010011 - Class B정답
- ④11100110 - Class D정답
15번 정답·해설 펼치기15번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ①입니다. IPv4 클래스는 첫 바이트의 선두 비트로 구분합니다. 0으로 시작하면 A(0~127), 10은 B(128~191), 110은 C(192~223), 1110은 D(224~239)입니다. 00010011은 0으로 시작하는 19이므로 Class A이며, Class C로 짝지은 ①은 틀렸습니다.
보기별 검토
① 선두 비트가 0이므로 Class A인데 C라고 하여 옳지 않습니다.
② 01001010은 0으로 시작하는 74이므로 Class A입니다. 옳습니다.
③ 10010011은 10으로 시작하는 147이므로 Class B입니다. 옳습니다.
④ 11100110은 1110으로 시작하는 230이므로 Class D(멀티캐스트)입니다. 옳습니다.
풀이 요령 · 관련 개념
풀이 요령: 10진수로 바꾸지 않고 앞자리 비트만 봅니다. 「0 = A, 10 = B, 110 = C, 1110 = D, 1111 = E」입니다.
문제 16Java 초기화 순서
다음 Java 프로그램의 출력 결과는?
class ClassA {
ClassA() {
System.out.print("1");
}
static {
System.out.print("4");
}
}
public class ClassB extends ClassA {
ClassB() {
System.out.print("2");
}
public static void main(String[] args) {
System.out.print("3");
new ClassB();
}
}
- ①32정답
- ②432정답
- ③3214정답
- ④4312정답
16번 정답·해설 펼치기16번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ④입니다. main 메서드를 실행하려면 먼저 ClassB 클래스가 초기화되어야 하고, 하위 클래스가 초기화되기 전에 상위 클래스 ClassA가 먼저 초기화됩니다. 이때 ClassA의 static 블록이 실행되어 4가 출력됩니다. 이어서 main이 3을 출력하고, new ClassB()가 실행되면 상위 생성자 ClassA()가 먼저 호출되어 1, 그다음 ClassB()가 2를 출력합니다. 결과는 4312입니다.
보기별 검토
① static 블록과 상위 생성자 호출을 모두 빠뜨렸습니다.
② 상위 생성자의 1을 빠뜨렸습니다.
③ static 블록이 객체 생성 뒤에 실행된다고 보아 틀렸습니다.
④ 4312이므로 옳습니다.
풀이 요령 · 관련 개념
풀이 요령: Java 실행 순서는 「상위 클래스 static → 하위 클래스 static → main → 상위 생성자 → 하위 생성자」입니다. static 블록은 클래스가 처음 로딩될 때 단 한 번 실행됩니다.
문제 17교착상태
교착상태(deadlock)에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 교착상태 발생의 필요조건은 상호 배제, 선점, 점유와 대기, 선형 대기이다.
ㄴ. 프로세스를 강제로 종료해서 교착상태 문제를 처리하는 것은 교착상태 회복 기법에 해당한다.
ㄷ. 어떤 제약을 가하지 않고 자원 할당 그래프를 지속적으로 모니터링하면서 교착상태 발생 여부를 살펴보는 것은 교착상태 예방 기법에 해당한다.
ㄹ. 은행원 알고리즘(banker’s algorithm) 등을 이용하여 안전(safe) 상태를 유지할 수 있는 범위 내에서 자원을 할당하는 것은 교착상태 회피 기법에 해당한다.
- ①ㄱ, ㄴ정답
- ②ㄱ, ㄷ정답
- ③ㄴ, ㄹ정답
- ④ㄷ, ㄹ정답
17번 정답·해설 펼치기17번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. 교착상태가 발생한 뒤 프로세스를 강제 종료하거나 자원을 선점하여 해결하는 것은 회복 기법입니다(ㄴ). 은행원 알고리즘처럼 자원 할당 후에도 안전 상태가 유지되는 경우에만 자원을 할당하는 것은 회피 기법입니다(ㄹ).
보기별 검토
① ㄱ은 틀렸습니다. 교착상태의 필요조건은 상호 배제, 점유와 대기, 비선점, 환형(순환) 대기입니다. 「선점」과 「선형 대기」는 잘못된 용어입니다.
② ㄱ과 ㄷ이 모두 틀렸습니다.
③ ㄴ과 ㄹ이 옳으므로 정답입니다.
④ ㄷ은 틀렸습니다. 제약 없이 자원 할당 그래프를 감시하며 교착상태 발생 여부를 살피는 것은 탐지 기법입니다. 예방은 네 가지 필요조건 중 하나를 원천적으로 부정하는 방법입니다.
풀이 요령 · 관련 개념
풀이 요령: 교착상태 해결은 「예방(조건 제거) → 회피(안전 상태 유지, 은행원 알고리즘) → 탐지(그래프 감시) → 회복(종료·선점)」의 네 단계로 정리합니다.
문제 18퀵 정렬의 분할 과정
다음 파이썬 코드로 작성된 partition() 함수를 이용하여, 주어진 배열을 퀵 정렬(quick sort)로 오름차순 정렬하고자 한다. 정렬 과정에서 단계별 정렬 순서로 나타날 수 없는 것은? (단, 피벗(pivot)은 정렬하고자 하는 대상의 마지막 원소로 선택한다)
# 정렬하고자 하는 대상인 A[first]…A[last]를
# 피벗(A[last]) 기준으로 분할하는 함수
def partition(A, first, last):
p = A[last]
low = first
high = last
while low < high:
while p > A[low] and low < high:
low += 1
while p <= A[high] and low < high:
high -= 1
if low < high:
A[low], A[high] = A[high], A[low]
A[low], A[last] = A[last], A[low]
return low
배열 7 3 2 19 13 5 11 17
- ①2, 3, 5, 7, 13, 11, 17, 19정답
- ②2, 3, 5, 11, 7, 13, 17, 19정답
- ③2, 3, 5, 11, 13, 7, 17, 19정답
- ④7, 3, 2, 11, 13, 5, 17, 19정답
18번 정답·해설 펼치기18번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. 처음 피벗 17로 분할하면 19와 11이 교환되고, 마지막에 19와 17이 교환되어 [7, 3, 2, 11, 13, 5, 17, 19]가 됩니다(④). 왼쪽 부분 [7, 3, 2, 11, 13, 5]를 피벗 5로 분할하면 7과 2가 교환되고 7과 5가 교환되어 [2, 3, 5, 11, 13, 7, 17, 19]가 됩니다(③). 이어 [11, 13, 7]을 피벗 7로 분할하면 11과 7이 교환되어 [2, 3, 5, 7, 13, 11, 17, 19]가 됩니다(①). 마지막으로 [13, 11]이 정렬됩니다.
보기별 검토
① 세 번째 분할 결과로 나타납니다.
② 7이 11과 13 사이에 오는 상태는 어느 분할 단계에서도 나오지 않으므로 정답입니다.
③ 두 번째 분할 결과로 나타납니다.
④ 첫 번째 분할 결과로 나타납니다.
풀이 요령 · 관련 개념
풀이 요령: 퀵 정렬에서는 한 번 분할이 끝날 때마다 피벗이 최종 위치에 고정됩니다. 각 선지에서 「이미 고정되어야 할 원소」가 제자리에 있는지 확인하면 빠르게 걸러낼 수 있습니다.
문제 19SSTF 디스크 스케줄링
디스크 스케줄링 기법 중 SSTF를 사용하여 다음과 같은 작업 대기 큐(디스크 큐)의 작업을 처리하고자 하는 경우, 처리되는 트랙의 순서를 바르게 나열한 것은? (단, 추가 I/O 요청은 없다고 가정한다)
○ 작업 대기 큐: 15, 4, 8, 120, 65, 70, 105
○ 헤드 시작 위치: 50
- ①65 → 70 → 105 → 120 → 15 → 8 → 4정답
- ②65 → 70 → 120 → 105 → 15 → 8 → 4정답
- ③70 → 65 → 105 → 120 → 15 → 8 → 4정답
- ④70 → 65 → 120 → 15 → 8 → 4 → 105정답
19번 정답·해설 펼치기19번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ①입니다. SSTF는 현재 헤드 위치에서 탐색 거리가 가장 짧은 요청을 먼저 처리합니다. 50에서 가장 가까운 65(거리 15) → 70(5) → 이때 105(35)가 15(55)보다 가까우므로 105 → 120(15) → 15(105) → 8 → 4 순서가 됩니다.
보기별 검토
① 각 단계의 최단 거리 선택과 일치하므로 옳습니다.
② 105보다 먼 120을 먼저 처리하여 틀렸습니다.
③ 50에서 65가 70보다 가까운데 70을 먼저 처리하여 틀렸습니다.
④ 시작 순서부터 틀렸고, 105를 마지막에 처리하여 틀렸습니다.
풀이 요령 · 관련 개념
풀이 요령: 매 단계 「지금 위치에서 가장 가까운 것」만 고르면 됩니다. 분기점(70에서 105와 15 중 선택)만 거리 계산을 정확히 하면 나머지는 자동으로 정해집니다.
문제 20배열 회전
다음 C 프로그램의 출력 결과는?
#include <stdio.h>
void rotate(int *a, int n, int k) {
k %= n;
while (k--) {
int first = a[0];
int i;
for (i = 0; i < n - 1; i++) {
a[i] = a[i + 1];
}
a[n - 1] = first;
}
}
int main(void) {
int arr[] = {1, 2, 3, 4, 5};
rotate(arr, 5, 7);
int i;
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
- ①1 2 3 4 5정답
- ②3 4 5 1 2정답
- ③4 5 1 2 3정답
- ④5 1 2 3 4정답
20번 정답·해설 펼치기20번 정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ②입니다. rotate 함수는 k %= n으로 k = 7 % 5 = 2가 됩니다. while 반복마다 첫 원소를 저장하고 나머지를 한 칸씩 앞으로 당긴 뒤 첫 원소를 맨 뒤에 넣으므로, 배열을 왼쪽으로 한 칸 회전합니다. 2번 회전하면 [1, 2, 3, 4, 5] → [2, 3, 4, 5, 1] → [3, 4, 5, 1, 2]가 되어 3 4 5 1 2가 출력됩니다.
보기별 검토
① 회전하지 않은 상태로, k가 5의 배수일 때의 결과입니다.
② 왼쪽으로 2칸 회전한 결과이므로 옳습니다.
③ 왼쪽으로 3칸(또는 오른쪽으로 2칸) 회전한 결과입니다.
④ 오른쪽으로 1칸(왼쪽으로 4칸) 회전한 결과입니다.
풀이 요령 · 관련 개념
풀이 요령: 회전 횟수는 먼저 n으로 나눈 나머지로 줄이고, 회전 방향(첫 원소를 뒤로 보내면 왼쪽)을 확인합니다. 왼쪽 k칸 회전 결과는 「k번째 원소부터 시작」하는 배열입니다.