정보처리기사 실기는 개념을 아는 것만으로는 점수가 안 나오는 시험입니다. 코드를 눈으로 따라가며 출력값을 맞히고, 스케줄링이나 페이지 교체 같은 계산을 손으로 끝까지 해내야 합니다. 이번 글에서는 그런 유형을 8문제로 묶었습니다.
모든 문제는 학습용으로 직접 만든 예상문제이며 실제 기출 문제가 아닙니다. 코드 출력과 계산 결과는 직접 실행해서 검산했습니다.
다음 프로세스를 FCFS와 비선점 SJF로 각각 처리할 때 평균 대기시간을 구하시오.
프로세스 도착시간 실행시간 P1 0 6 P2 1 3 P3 2 8 P4 3 2
정답: FCFS 6.5, SJF 4.75
대기시간은 시작 시각에서 도착 시각을 뺀 값입니다. FCFS는 도착 순서대로 P1(0~6), P2(6~9), P3(9~17), P4(17~19)가 실행되어 대기시간이 0, 5, 7, 14이고 합 26을 4로 나누면 6.5입니다.
비선점 SJF는 P1이 끝나는 6초 시점에 대기 중인 P2(3), P3(8), P4(2) 가운데 실행시간이 가장 짧은 P4를 고릅니다. 순서는 P1, P4, P2, P3이고 대기시간은 0, 3(P4), 7(P2), 9(P3)이므로 합 19, 평균 4.75입니다.
프레임이 3개이고 처음에는 모두 비어 있다. 참조 순서가 아래와 같을 때 FIFO와 LRU의 페이지 부재 횟수를 각각 구하시오.
7 0 1 2 0 3 0 4 2 3 0 3 2
정답: FIFO 10회, LRU 9회
FIFO는 가장 먼저 들어온 페이지를 내보냅니다. 부재가 나는 참조는 7, 0, 1, 2, 3, 0, 4, 2, 3, 0 순서로 10번입니다. LRU는 가장 오래 사용하지 않은 페이지를 내보내므로 최근에 쓴 0과 3이 남아 부재가 7, 0, 1, 2, 3, 4, 2, 3, 0 순서로 총 9번에 그칩니다. 시험에서는 프레임 상태를 표로 그려야 실수가 없습니다.
빈 이진 탐색 트리에 50, 30, 70, 20, 40, 60, 80, 35를 차례로 삽입했다. 전위, 중위, 후위 순회 결과를 쓰시오.
정답
35는 50보다 작고 30보다 크며 40보다 작으므로 40의 왼쪽 자식이 됩니다. 이진 탐색 트리의 중위 순회는 항상 오름차순이 되므로 검산에 쓰기 좋습니다.
a = [1,2,3,4,5,6,7,8,9,10]
print(a[2:8:2], a[::-3], [x*x for x in a if x%3==0])
d = {}
for w in "abracadabra":
d[w] = d.get(w, 0) + 1
print(d) 정답
[3, 5, 7] [10, 7, 4, 1] [9, 36, 81]
{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1} a[2:8:2]는 인덱스 2, 4, 6의 값이고, a[::-3]은 끝에서부터 3칸씩 건너뜁니다. 딕셔너리는 처음 등장한 순서(a, b, r, c, d)대로 키가 들어가며 글자 수를 센 결과가 출력됩니다.
#include <stdio.h>
int main(void){
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr + 1;
int sum = 0;
while (p < arr + 5) {
sum += *p;
p += 2;
}
printf("%d %ld\n", sum, (long)(p - arr));
return 0;
} 정답: 60 5
p는 arr[1](20)에서 시작해 arr[3](40)까지 두 번 더해 sum이 60이 됩니다. 이후 p가 arr+5가 되면 조건이 거짓이 되어 반복을 끝내고, 포인터 뺄셈은 요소 개수 단위이므로 p – arr은 5입니다.
class Parent {
String name = "Parent";
String who() { return "Parent.who"; }
static String st() { return "Parent.st"; }
}
class Child extends Parent {
String name = "Child";
@Override String who() { return "Child.who"; }
static String st() { return "Child.st"; }
}
public class Main {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.name + " " + p.who() + " " + p.st());
}
} 정답: Parent Child.who Parent.st
필드와 static 메서드는 오버라이딩되지 않고 참조 변수의 선언 타입(Parent)을 따릅니다. 반면 인스턴스 메서드 who()는 실제 객체 타입(Child)에 따라 동적으로 결정됩니다. 업캐스팅과 다형성 문제에서 자주 쓰이는 함정입니다.
emp 테이블에 (id, dept, sal)이 아래와 같을 때, 다음 쿼리의 결과를 쓰시오. sal이 비어 있는 값은 NULL이다.
(1,A,300) (2,A,500) (3,B,200) (4,B,250) (5,C,700) (6,C,400) (7,C,NULL) (8,A,NULL) SELECT dept, COUNT(*), COUNT(sal), AVG(sal) FROM emp GROUP BY dept HAVING AVG(sal) >= 400 ORDER BY dept;
정답: (A, 3, 2, 400), (C, 3, 2, 550)
COUNT(*)는 NULL 행을 포함해 세지만 COUNT(sal)과 AVG(sal)은 NULL을 제외합니다. A는 (300+500)/2=400, B는 225로 조건에서 탈락, C는 (700+400)/2=550입니다. HAVING은 그룹을 만든 뒤 걸러낸다는 점을 같이 기억해 두세요.
제어 흐름 그래프의 노드가 9개, 간선이 11개일 때 McCabe 순환 복잡도를 구하시오.
정답: 4
순환 복잡도는 간선 수 – 노드 수 + 2로 구하므로 11 – 9 + 2 = 4입니다. 판단문(조건 분기)의 개수에 1을 더한 값과도 같고, 독립적인 경로의 최소 개수를 뜻해서 화이트박스 테스트 케이스 수의 기준이 됩니다.
이 글의 문제는 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 최신 출제 범위와 일정은 한국산업인력공단 Q-Net 공식 공지를 반드시 확인하세요.
정부 쪽에서 집값이 크게 떨어질 수 있으니 대비하자는 말이 나오고 있습니다. 그런데 시장에서는 서울 아파트값이…
11월에 일정이 있는 빅데이터분석기사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…
11월에 일정이 있는 정보보안기사·정보보안산업기사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…
10월 20일 코스피는 3.73% 하락한 5,552.74로 마감했습니다. 전날 반등했던 지수가 하루 만에 215.27포인트를 반납한 셈입니다.…
11월에 일정이 있는 정보관리기술사·컴퓨터시스템응용기술사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…
10월 20일 원·달러 환율이 1,328.1원으로 거래를 마쳤습니다(주간 종가 기준, 오후 3시 30분). 전날보다 2.2원 내려…