SRAM은 휘발성 메모리이므로 전원이 꺼지면 저장된 내용이 사라진다는 점에서, 전원이 꺼져도 자료를 보존한다는 설명이 옳지 않다.
SRAM은 플립플롭으로 비트를 저장해 재충전(refresh)이 필요 없고 빠르지만, 전원 공급이 유지되는 동안에만 값을 기억한다. 전원 없이 보존되는 것은 ROM·플래시 메모리 같은 비휘발성 기억장치이다.
- MIPS: 1초에 처리하는 명령어 수를 백만 단위로 나타낸 연산 속도 단위로 옳다.
- KB·MB·GB·TB: 단위가 올라갈 때마다 1024배씩 커지므로 TB가 가장 큰 단위라는 설명은 옳다.
- SSI·MSI·LSI·VLSI: 한 칩에 들어가는 게이트 수(집적도)에 따른 집적회로 분류로 옳다.

번호가 왼쪽 서브트리 → 오른쪽 서브트리 → 루트 순으로 붙어 있으므로 후위 순회(post-order)이다.
루트 9 의 왼쪽 서브트리에서 1, 2, 3 을 거쳐 그 루트 4 를 방문하고, 오른쪽 서브트리에서 5, 6, 7 을 거쳐 8 을 방문한 뒤 마지막에 루트 9를 방문한다. 모든 노드가 자식들보다 늦은 번호를 가진다.
- 병렬 순회: 이진트리의 표준 순회 방식(전위·중위·후위)에 속하지 않는다.
- 전위 순회: 루트를 가장 먼저 방문하므로 루트에 1이 붙어야 한다.
- 중위 순회: 왼쪽 서브트리 → 루트 → 오른쪽 서브트리 순이라 루트가 중간 번호를 가져야 한다.
Sheet1
| A | B | C | D | |
| 1 | 상품명 | 산지 | 생산자 | 가격 |
| 2 | 오이 | 청주 | 김철수 | 500 |
| 3 | 배추 | 울산 | 황인용 | 2000 |
| 4 | 무우 | 김제 | 김영운 | 1500 |
| 5 | 시금치 | 평창 | 나윤로 | 1000 |
| 6 | 상추 | 대전 | 김윤철 | 700 |
Sheet2
| A | B | |
| 1 | 상품명 | 가격 |
| 2 | 무우 | |
| 3 | 시금치 |
B3 에 넣을 수식은 =VLOOKUP(A3,Sheet1!A2:D6,4,0)이다.
VLOOKUP(찾을 값, 범위, 열 번호, 일치 옵션)에서 찾을 값은 Sheet2 의 A3(시금치), 범위는 다른 시트이므로 Sheet1!A2:D6 처럼 시트명을 붙이고, 가격은 범위의 넷째 열이며 0(FALSE)은 정확히 일치하는 값을 찾는다. 결과는 1000 이다.
- 찾을 값을 따옴표 없는 시금치로 쓴 수식: 문자열이 아니라 이름으로 해석되어 오류가 나며, 셀 참조 A3 을 써야 한다.
- 범위를 A2:A6, 열 번호를 5로 쓴 수식: 시트명이 없어 Sheet2 를 참조하고, 1열짜리 범위에 다섯째 열은 존재하지 않는다.
- Sheet1!A2:A6 에서 다섯째 열을 찾는 수식: 범위가 A열 하나뿐이라 가격 열을 포함하지 못한다.
- 결합도(coupling)와 응집도(cohesion)는 모듈의 ( ㉠ )을 판단하는 기준이다.
- 결합도란 모듈 ( ㉡ )의 관련성을 의미하며, 응집도란 모듈 ( ㉢ )의 관련성을 의미한다.
- 좋은 설계를 위해서는 결합도는 ( ㉣ ), 응집도는 ( ㉤ ) 방향으로 설계해야 한다.
빈칸은 차례로 독립성, 사이, 내부, 작게, 큰이다.
결합도와 응집도는 모듈의 독립성을 재는 척도이다. 결합도는 모듈과 모듈 사이의 의존 정도, 응집도는 한 모듈 내부 구성 요소끼리의 관련 정도를 뜻하며, 좋은 설계는 결합도는 낮게, 응집도는 높게 만든다.
- 독립성, 내부, 사이, 크게, 작은: 결합도와 응집도의 범위가 뒤바뀌었고 설계 방향도 반대이다.
- 추상성, 사이, 내부, 작게, 큰: 결합도·응집도가 판단하는 것은 추상화 수준이 아니라 모듈 독립성이다.
- 추상성, 내부, 사이, 크게, 작은: 판단 기준, 관련성의 범위, 설계 방향이 모두 틀렸다.
값의 대소 비교로 정렬하는 비교 기반 정렬이 최악의 경우에 달성할 수 있는 가장 빠른 시간 복잡도는 이다.
n개 원소의 가능한 순서는 가지이고, 비교 한 번은 결과를 둘로 나누므로 최소 번의 비교가 필요하며 이는 에 비례한다. 합병 정렬·힙 정렬이 이 하한을 달성한다.
- : 계수 정렬·기수 정렬처럼 비교를 쓰지 않는 정렬에서나 가능하며, 비교 기반 정렬은 최악의 경우 이에 도달할 수 없다.
- : 정렬된 배열의 이진 탐색 복잡도로, 모든 원소를 한 번씩 보는 것조차 불가능한 시간이다.
- : 버블·선택·삽입 정렬의 복잡도로, 가장 빠른 알고리즘이 아니다.
1, 0, 2, 2, 2, 1, 7, 6, 7, 0, 1, 2
LRU 로 처리하면 12회 참조 중 적중이 5회이므로 적중률은 5/12이다.
1, 0, 2 는 부재 후 적재, 이어지는 2, 2, 1 은 적중이다. 7 은 빈 프레임에 적재되어 프레임이 1, 0, 2, 7 로 찬다. 6 은 가장 오래 쓰이지 않은 0 을 내보내고 적재, 7 은 적중이다.
0 은 다시 부재로 가장 오래 쓰이지 않은 2 를 내보내고, 1 은 적중, 마지막 2 는 부재이다. 따라서 적중 5회, 부재 7회이다.
- 6/12: 적중을 한 번 더 센 값으로, 마지막 2 는 앞서 교체되어 부재이다.
- 7/12: 부재 횟수(7회)를 적중률로 착각한 값이다.
- 8/12: 교체 대상을 잘못 고르는 등 추적을 틀렸을 때 나오는 값이다.





식을 간략화하면 AB가 되어 A 와 B 를 입력으로 하는 AND 게이트가 된다.
분배 법칙으로 이다.
남은 항을 곱하면 이다.
- A, B 를 입력으로 한 OR 게이트: A+B 를 나타내므로 간략화 결과와 다르다.
- A 와 B의 부정을 입력으로 한 OR 게이트: A 와 B의 부정의 합으로, 식의 한 인수일 뿐 전체 결과가 아니다.
- A 와 B의 부정을 입력으로 한 AND 게이트: A 와 B의 부정의 곱을 나타내며, 원식에 A=1, B=0 을 넣으면 A의 부정과 B의 합 인수가 0 이 되어 결과가 맞지 않는다.
- OSI 계층 모델의 네트워크 계층에서 동작하는 장비이다.
- 송신측과 수신측 간의 가장 빠르고 신뢰성 있는 경로를 설정·관리하며, 데이터를 전달하는 역할을 한다.
- 주로 같은 프로토콜을 사용하는 네트워크간의 최적경로 설정을 위해 패킷이 지나가야 할 정보를 테이블에 저장하여 지정된 경로를 통해 전송한다.
설명에 해당하는 장비는 라우터(router)이다.
라우터는 OSI 3계층(네트워크 계층)에서 동작하며, 라우팅 테이블에 경로 정보를 저장해 두고 패킷을 목적지까지 최적 경로로 전달한다.
- 게이트웨이: 프로토콜이 서로 다른 네트워크를 연결하는 장비로, 주로 상위 계층에서 프로토콜 변환을 한다.
- 브리지: 데이터 링크 계층에서 MAC 주소로 프레임을 걸러 두 세그먼트를 잇는다.
- 리피터: 물리 계층에서 감쇠된 신호를 증폭·재생할 뿐 경로를 선택하지 않는다.
void main()
{
int a[4]= {10, 20, 30 };
int *p = a;
p++;
*p++ = 100;
*++p = 200;
printf("a[0]=%d a[1]=%d a[2]=%d \n",
a[0], a[1], a[2]);
}
출력은 a[0]=10 a[1]=100 a[2]=30이다.
p 는 a[0] 을 가리키다가 p++ 로 a[1] 로 옮긴다. *p++ = 100 은 후위 증가라 현재 위치 a[1] 에 100 을 넣은 뒤 p 가 a[2] 로 간다. *++p = 200 은 전위 증가라 p 를 먼저 a[3] 으로 옮긴 뒤 200 을 넣으므로 a[2] 는 30 그대로이다.
- a[1]=20 a[2]=30 인 출력: *p++ = 100 으로 a[1] 이 바뀐 것을 반영하지 않았다.
- a[1]=20 a[2]=200 인 출력: 100 이 a[1] 에 들어간 것을 놓쳤고, 200 은 a[2] 가 아니라 a[3] 에 들어간다.
- a[1]=100 a[2]=200 인 출력: 전위 증가 ++p 가 대입 전에 포인터를 a[3] 으로 옮긴다는 점을 놓쳤다.
- ㄱ. 인터럽트 서비스 루틴을 수행한다.
- ㄴ. 보관한 프로그램 상태를 복구한다.
- ㄷ. 현재 수행 중인 명령을 완료하고 상태를 저장한다.
- ㄹ. 인터럽트 발생 원인을 찾는다.
인터럽트 처리 순서는 상태 저장 → 원인 판별 → 서비스 루틴 수행 → 상태 복구(ㄷ → ㄹ → ㄱ → ㄴ)이다.
CPU 는 수행 중인 명령을 끝낸 뒤 PC 등 프로그램 상태를 저장하고, 어떤 장치가 인터럽트를 걸었는지 판별한 다음 해당 인터럽트 서비스 루틴을 실행한다. 끝나면 저장해 둔 상태를 복구해 원래 프로그램으로 돌아간다.
- ㄷ → ㄹ → ㄴ → ㄱ: 서비스 루틴을 수행하기도 전에 상태를 복구할 수 없다.
- ㄹ → ㄷ → ㄱ → ㄴ: 원인 판별 전에 현재 명령을 마치고 상태부터 저장해야 한다.
- ㄹ → ㄷ → ㄴ → ㄱ: 시작 단계와 마무리 단계의 순서가 모두 뒤바뀌었다.
<표> CPM 소작업 리스트
| 소작업 | 선행 작업 | 소요 기간(일) |
| A | 없음 | 15 |
| B | 없음 | 10 |
| C | A, B | 10 |
| D | B | 25 |
| E | C | 15 |
작업 C 는 가장 빠른 착수일 15일, 가장 늦은 착수일 15일, 여유 기간 0일이다.
C 는 A(15일)와 B(10일)가 모두 끝나야 시작하므로 가장 빠른 착수일은 15일이다. 이후 E 는 25일에 시작해 40일에 끝나고, D 는 10일에 시작해 35일에 끝나므로 전체 공기는 40일이다.
역산하면 E 의 가장 늦은 착수일은 40 − 15 = 25일, C 의 가장 늦은 착수일은 25 − 10 = 15일이다. 여유는 15 − 15 = 0 으로 C 는 임계 경로(A → C → E) 위에 있다.
- 10일, 15일, 5일: C 는 A 도 기다려야 하므로 B 만 보고 10일에 시작할 수 없다.
- 10일, 25일, 5일: 가장 빠른 착수일을 B 기준으로 잡았고, 25일은 E 의 착수일이다.
- 15일, 25일, 0일: 가장 늦은 착수일이 25일이면 여유가 10일이 되어 스스로 모순이며, 25일은 E 의 값이다.
PUSH C
PUSH A
PUSH B
ADD
MUL
POP Z
프로그램이 계산하는 식은 Z = (A + B) * C이다.
C, A, B 를 차례로 넣은 뒤 ADD 는 위의 두 값 A, B 를 꺼내 A + B를 넣고, MUL 은 남은 C 와 곱해 C × (A + B) 를 넣는다. 마지막 POP Z 가 그 결과를 Z 에 저장한다.
- Z = C + A * B: 곱셈이 먼저 수행되어야 하지만 프로그램은 ADD 를 먼저 실행한다.
- Z = B + C * A: 덧셈 대상과 곱셈 대상이 모두 다르다.
- Z = (C + B) * A: 먼저 더해지는 것은 스택 꼭대기의 A 와 B 이다.
완료된 트랜잭션의 변경이 고장에도 사라지지 않는 성질은 지속성(durability)이므로, 이를 종속성(dependency)이라 한 설명이 옳지 않다.
트랜잭션의 4대 특성은 ACID, 즉 원자성(Atomicity)·일관성(Consistency)·고립성(Isolation)·지속성(Durability)이며, 종속성은 여기에 포함되지 않는다.
- 원자성: 트랜잭션은 전부 수행되거나 전혀 수행되지 않아야 한다(All or Nothing)는 설명으로 옳다.
- 일관성: 실행 전후 데이터베이스가 일관된 상태를 유지해야 한다는 설명으로 옳다.
- 고립성: 동시에 실행되는 다른 트랜잭션의 간섭을 받지 않아야 한다는 설명으로 옳다.
- ㄱ.
- ㄴ.
- ㄷ.
- ㄹ.
10진수로 바꾸면 큰 순서는 ㄴ, ㄷ, ㄱ, ㄹ이다.
따라서 256 > 255 > 249 > 248 이다.
- ㄱ, ㄴ, ㄷ, ㄹ: 16진수 F9 는 249 로 256 과 255 보다 작다.
- ㄷ, ㄹ, ㄱ, ㄴ: 10진수 256 이 가장 크며, 8진수 370 은 248 로 가장 작다.
- ㄹ, ㄱ, ㄴ, ㄷ: 8진수 370 을 가장 크게 본 배열로, 실제로는 가장 작은 값이다.
공개키 암호화에서 메시지를 보낼 때는 수신자의 공개키로 암호화하므로, 개인키를 메시지 전송에 사용한다는 설명이 옳지 않다.
송신자가 수신자의 공개키로 암호화하면 그 짝인 개인키를 가진 수신자만 복호화할 수 있다. 개인키는 소유자만 보관하며 받은 메시지의 복호화나 전자서명 생성에 쓰인다.
- 공개키와 개인키 한 쌍으로 이루어진다는 설명은 옳다.
- 개인키로 서명하고 공개키로 검증하는 전자서명이 대표적 활용 예라는 설명은 옳다.
- 암호화 키와 복호화 키가 달라 송수신자가 서로 다른 키를 쓴다는 설명은 옳다(비대칭키 방식).
- 평균 기억장치 접근시간 : Ta = 1.9ms
- 주기억장치 접근시간 : Tm = 10ms
- 캐시 기억장치 접근시간 : Tc = 1ms
캐시 적중률은 90%이다.
평균 접근시간은 적중 시 캐시 시간, 실패 시 주기억장치 시간을 적중률로 가중평균한다.
값을 대입하면
- 80%: 대입하면 평균 접근시간이 2.8ms 가 되어 주어진 값보다 크다.
- 85%: 평균 접근시간이 2.35ms 로 맞지 않는다.
- 95%: 평균 접근시간이 1.45ms 로 주어진 값보다 작다.

같은 이름의 연산이 객체마다 다르게 동작하는 개념은 다형성(polymorphism)이다.
출입문·창문·상자에 같은 'open' 오퍼레이션을 보내도 각 객체가 자기 방식대로 동작한다. Java 에서는 같은 이름에 매개변수를 달리하는 오버로딩과 상속받은 메서드를 재정의하는 오버라이딩으로 구현한다.
- 캡슐화: 데이터와 연산을 하나로 묶고 내부를 숨기는 개념이다.
- 인스턴스: 클래스로부터 만들어진 실제 객체를 가리킨다.
- 상속: 상위 클래스의 속성과 연산을 하위 클래스가 물려받는 개념이다.
6 − 13 은 00000110 + 11110011(2진수)로 바꿔 계산한다.
뺄셈 A − B 는 B 의 2의 보수를 더하는 A + (−B) 로 바꾼다. 13 은 00001101 이고, 모든 비트를 반전한 11110010 에 1 을 더하면 11110011(−13)이 된다. 6 은 그대로 00000110 이다.
더하면 11111001 로, 이는 −7 의 2의 보수 표현이다.
- 00000110 − 11110011: 보수를 쓰는 목적은 뺄셈을 덧셈으로 바꾸는 것이므로 빼기 연산이 남아 있으면 안 된다.
- 11111010 + 11110011: 11111010 은 −6 이므로 −6 − 13 을 계산한 식이 된다.
dxdiag - msconfig - regedit - mstsc
명령어별 기능은 컴퓨터사양 확인 - 시작프로그램 편집 - 레지스트리 편집 - 원격데스크탑 실행이다.
dxdiag는 DirectX 진단 도구로 CPU·메모리·그래픽 등 시스템 사양을 보여 주고, msconfig 는 시스템 구성 유틸리티로 시작프로그램과 부팅 옵션을 편집한다. regedit 는 레지스트리 편집기, mstsc는 원격 데스크톱 연결을 실행한다.
- 원격데스크탑 실행- 작업관리자 편집- 서비스 편집 - 시스템 셧다운 설정: 원격 데스크톱은 mstsc 의 기능이고, 작업관리자는 taskmgr, 서비스는 services.msc, 시스템 종료는 shutdown 명령이다.
- 컴퓨터사양 확인 - 작업관리자 편집 - 레지스트리 편집 - 원격데스크탑 실행: msconfig 는 작업관리자가 아니라 시스템 구성(시작프로그램) 도구이다.
- 원격데스크탑 실행 - 시작프로그램 편집 - 서비스 편집 - 시스템 셧다운 설정: dxdiag 는 사양 진단, regedit 는 레지스트리 편집, mstsc 는 원격 데스크톱이다.
- 요청 큐 : 99, 182, 35, 121, 12, 125, 64, 66
- 서비스 순서 : 64, 66, 99, 121, 125, 182, 12, 35
처리 순서는 C-SCAN 방식이다.
헤드가 50 에서 바깥쪽으로 이동하며 64, 66, 99, 121, 125, 182 를 차례로 처리한 뒤, 되돌아오며 처리하지 않고 반대쪽 처음(0 트랙 쪽)으로 이동해 다시 같은 방향으로 12, 35 를 처리한다.
- FCFS: 요청이 들어온 순서(99, 182, 35, …)대로 처리해야 한다.
- SSTF: 66 다음에는 거리 31 인 35 가 거리 33 인 99 보다 가까우므로 35 를 먼저 처리해야 한다.
- SCAN: 끝에서 방향을 바꿔 돌아오며 처리하므로 182 다음에 35, 12 순서가 되어야 한다.