WAV는 이미지가 아니라 오디오(음성) 파일 형식이다.
WAV는 마이크로소프트와 IBM이 정의한 무압축 PCM 기반의 소리 저장 형식이다.
- BMP: 윈도우 표준 비트맵 이미지 형식으로, 보통 압축 없이 픽셀을 저장한다.
- TIFF: 태그 구조를 가진 고품질 이미지 형식으로, 인쇄·출판에 널리 쓰인다.
- JPEG: 손실 압축을 쓰는 사진용 이미지 형식이다.
SELECT는 데이터를 조회하는 DML(데이터 조작어)이므로 DDL이 아니다.
DDL은 테이블·뷰·인덱스 같은 스키마 객체를 정의·변경·삭제하는 명령어이다.
- ALTER: 기존 테이블 구조를 변경하는 DDL이다.
- DROP: 스키마 객체를 삭제하는 DDL이다.
- CREATE: 스키마 객체를 새로 생성하는 DDL이다.
두 수를 10진수로 바꿔 더한 뒤 8진수로 바꾸면 이다.
이므로 8진수로 이다.
- , , 는 각각 10진수 406, 415, 470으로 합계 479와 다르다.
데이터 링크 계층의 PDU는 프레임(frame)이다.
데이터 링크 계층은 상위 계층 패킷에 MAC 주소 헤더와 오류 검출용 트레일러를 붙여 프레임 단위로 전송한다.
- 비트: 물리 계층의 전송 단위이다.
- 패킷: 네트워크 계층의 PDU이다.
- 세그먼트: 전송 계층(TCP)의 PDU이다.
FTP는 파일 전송 프로토콜로, 이메일 송수신용이 아니다.
이메일은 송신에 SMTP, 수신(메일함 접근)에 POP3·IMAP을 사용한다.
- POP3: 서버의 메일을 클라이언트로 내려받는 수신 프로토콜이다.
- SMTP: 메일을 송신·전달하는 프로토콜이다.
- IMAP: 서버에 메일을 보관한 채 동기화하며 읽는 수신 프로토콜이다.
ㄴ. 클래스 다이어그램
ㄷ. 컴포넌트 다이어그램
ㄹ. 시퀀스 다이어그램
구조 다이어그램에 해당하는 것은 클래스 다이어그램(ㄴ)과 컴포넌트 다이어그램(ㄷ)이다.
UML 2.0은 시스템의 정적 구성을 표현하는 구조 다이어그램과 동적 동작을 표현하는 행위 다이어그램으로 나뉜다.
- ㄱ 활동 다이어그램: 처리 흐름을 표현하는 행위 다이어그램이다.
- ㄴ 클래스 다이어그램: 클래스와 관계를 표현하는 구조 다이어그램이다.
- ㄷ 컴포넌트 다이어그램: 컴포넌트 간 의존 관계를 표현하는 구조 다이어그램이다.
- ㄹ 시퀀스 다이어그램: 객체 간 메시지 순서를 표현하는 행위(상호작용) 다이어그램이다.
동등 분할은 명세만 보고 입력을 유효·무효 영역으로 나누는 블랙박스 테스트 기법이다.
블랙박스 테스트는 내부 코드를 보지 않고 요구사항·명세를 기준으로 시험한다.
- 조건 커버리지: 각 조건식의 참·거짓을 수행하는 화이트박스 기법이다.
- 기본 경로 테스트: 순환 복잡도로 독립 경로를 도출하는 화이트박스 기법이다.
- 문장 커버리지: 모든 문장을 한 번 이상 실행하는 화이트박스 기법이다.
일괄 처리 시스템은 일정량·일정 기간의 작업을 모아 한꺼번에 처리하는 방식이다.
사용자와 상호작용 없이 모아 둔 작업을 순서대로 처리하므로 급여 계산 같은 정기 작업에 적합하다.
- 요구 즉시 처리하는 것은 실시간 처리 시스템이다.
- 여러 컴퓨터에 작업을 나누어 처리하는 것은 분산 처리 시스템이다.
- CPU 시간을 고르게 나눠 여러 사용자가 번갈아 쓰는 것은 시분할 시스템이다.

두 번 삭제하면 front 쪽 원소 A, B가 빠지고 front만 두 칸 이동하여 C, D, E, F가 남고 rear는 F 위치 그대로인 상태가 된다.
큐는 선입선출(FIFO) 구조이므로 삭제는 front 쪽에서만 일어난다. 원소를 하나 꺼낼 때마다 front가 한 칸 증가하고, 삽입이 없으므로 rear는 변하지 않는다.
- A, B, C, D가 남고 rear가 D로 당겨진 상태: rear 쪽 E, F를 꺼낸 것으로, 나중에 들어온 것을 먼저 꺼내는 스택 동작이다.
- B, C, D, E가 남고 front·rear가 한 칸씩 움직인 상태: 원소 A와 F를 함께 제거한 것으로, 양쪽 끝에서 삭제하는 덱 동작이지 큐 삭제가 아니다.
- A, C, D, E가 남은 상태: 중간의 B와 끝의 F를 빼낸 것으로, front 쪽에서만 삭제하는 큐 규칙과 맞지 않는다.
응답 시간 증가는 운영체제의 목적이 아니며, 응답 시간은 단축하는 것이 목적이다.
운영체제의 성능 평가 기준은 처리 능력 향상, 반환(응답) 시간 단축, 사용 가능도 향상, 신뢰도 향상이다.
- 신뢰도 향상: 시스템이 오류 없이 동작하도록 하는 목적에 해당한다.
- 처리량 향상: 단위 시간당 처리하는 작업량을 늘리는 목적에 해당한다.
- 사용 가능도 향상: 필요할 때 즉시 자원을 쓸 수 있도록 하는 목적에 해당한다.
링 카운터는 플립플롭으로 상태를 기억하는 순서 논리회로이므로 해당하지 않는다.
현재 입력만으로 출력이 정해지는 회로는 조합 논리회로이며, 기억 소자가 없다.
- 반가산기: 두 비트의 합과 자리올림을 내는 조합 논리회로이다.
- 멀티플렉서: 선택 신호에 따라 여러 입력 중 하나를 출력하는 조합 논리회로이다.
- 디멀티플렉서: 하나의 입력을 선택된 출력선으로 보내는 조합 논리회로이다.
직접 사상은 주기억장치 블록마다 캐시의 한 위치에만 대응하므로, 여러 캐시 블록으로 사상할 수 있다는 설명이 옳지 않다.
직접 사상에서는 블록 번호를 캐시 라인 수로 나눈 나머지로 위치가 고정된다. 여러 위치에 둘 수 있는 것은 연관 사상·집합 연관 사상이다.
- 캐시는 빠른 SRAM으로 구현하는 것이 일반적이다.
- 캐시는 주기억장치보다 용량은 작고 접근 속도는 빠르다.
- 캐시는 시간적·공간적 지역성을 이용해 적중률을 높인다.
ㄴ. 1니블(nibble)은 2비트이다.
ㄷ. 워드(word) 크기는 컴퓨터 시스템에 따라 다를 수 있다.
옳은 것은 ㄱ과 ㄷ이다.
니블은 바이트의 절반인 4비트이므로 ㄴ이 틀렸다.
- ㄱ: 1바이트는 8비트로, 옳다.
- ㄴ: 1니블은 4비트이므로 2비트라는 설명은 틀렸다.
- ㄷ: 워드는 CPU가 한 번에 처리하는 단위로 시스템마다 크기가 다르다.
#include <stdio.h>
int repeat(int a, int b) {
if (b == 0)
return a;
else if (b % 2 == 0)
return repeat(a + a, b / 2);
else
return repeat(a + a, b / 2) + a;
}
int main() {
printf("%d", repeat(3, 6));
return 0;
}
재귀 호출을 추적하면 출력값은 42이다.
repeat(3, 6): b가 짝수 → repeat(6, 3)
repeat(6, 3): b가 홀수 → repeat(12, 1) + 6
repeat(12, 1): b가 홀수 → repeat(24, 0) + 12
repeat(24, 0): b가 0 → 24 반환
되돌아오며 계산하면 24 + 12 = 36, 36 + 6 = 42이다. 기저 조건에서 0이 아니라 a를 반환하므로 단순 곱 3 × 6 = 18과는 다른 값이 나온다.
- 12, 24, 30은 재귀 추적 결과와 다르다.
A 클래스 주소에서 호스트 ID는 24비트이다.
IPv4 주소는 32비트이며, A 클래스는 앞 8비트가 네트워크 ID(최상위 비트 0)이고 나머지 24비트가 호스트 ID이다.
- 8비트: A 클래스의 네트워크 ID 길이이다.
- 16비트: B 클래스의 호스트 ID 길이이다.
- 32비트: IPv4 주소 전체 길이이다.
ㄴ. 블록체인 유형에는 퍼블릭 블록체인, 프라이빗 블록체인 등이 있다.
ㄷ. 블록체인에서 사용되는 합의 알고리즘에는 작업 증명(PoW: Proof of Work), 지분 증명(PoS: Proof of Stake) 등이 있다.
ㄱ, ㄴ, ㄷ이 모두 옳다.
블록체인은 거래 기록 블록을 해시로 연결해 분산 저장하는 기술로, 참여자 간 합의 알고리즘으로 위변조를 막는다.
- ㄱ: 비트코인은 블록체인을 기반으로 한 최초의 대표적 암호화폐이다.
- ㄴ: 누구나 참여하는 퍼블릭, 허가된 기관만 참여하는 프라이빗(및 컨소시엄) 블록체인이 있다.
- ㄷ: 연산 경쟁 방식인 작업 증명(PoW), 보유 지분 기반인 지분 증명(PoS) 등이 합의 알고리즘이다.
| 프로세스 | 도착시간 | 실행시간 |
|---|---|---|
| P1 | 0 | 6 |
| P2 | 1 | 4 |
| P3 | 2 | 1 |
| P4 | 3 | 2 |
두 번째로 실행되는 프로세스는 P3이다.
시각 0에는 P1만 도착해 있으므로 P1이 먼저 실행되고, 비선점이므로 시각 6까지 끝까지 수행한다.
시각 6에는 P2(4), P3(1), P4(2)가 모두 대기 중이며, 실행시간이 가장 짧은 P3이 다음으로 선택된다. 이후 순서는 P4, P2이다.
- P1: 첫 번째로 실행된다.
- P2: 실행시간이 가장 길어 마지막에 실행된다.
- P4: P3 다음, 세 번째로 실행된다.
for (i = 0; i < n; i++)
for(j = 0; j < 500; j++)
printf("i * j = %d\n", i * j);
바깥 반복은 n회, 안쪽 반복은 n과 무관하게 500회이므로 시간 복잡도는 이다.
총 실행 횟수는 이고, 상수 계수는 점근 표기에서 무시된다.
- : 안쪽 반복도 n에 비례할 때의 복잡도이다.
- : 반복마다 문제 크기가 절반씩 줄 때의 복잡도이다.
- : 안쪽 반복이 회일 때의 복잡도로, 여기서는 상수 500회이므로 해당하지 않는다.
TLB는 페이지 테이블의 캐시로서 최근 변환 정보를 보관한다.
가상 주소를 물리 주소로 바꿀 때 메모리의 페이지 테이블을 매번 읽는 대신, 자주 쓰는 항목을 TLB에서 바로 찾아 변환 속도를 높인다.
- TLB는 명령어용·데이터용 분리나 다단계 구성, 코어별 배치 등으로 한 시스템에 여러 개 둘 수 있다.
- TLB 실패 시에는 페이지 테이블을 조회할 뿐이며, 해당 페이지가 메모리에 있으면 페이지 부재는 발생하지 않는다.
- TLB는 가상 주소를 물리 주소로 변환하기 위한 것으로, 방향이 반대이다.
student_list = ['A', 'B', 'C', 'D']
student_score = ['92', '85', '77', '54']
student_grade = []
i = 0
for _ in range(len(student_score)):
try:
if student_score[_] >= 90:
student_grade.append('A+')
i+=1
elif student_score[_] >= 80:
student_grade.append('B+')
i+=1
elif student_score[_] >= 70:
student_grade.append('C+')
i+=1
else:
student_grade.append('D+')
i+=1
except: student_grade.append('F')
print("%s, %s" % (student_list[i], student_grade[i]))
점수가 문자열이라 정수와 비교할 때마다 예외가 발생하므로 출력은 A, F이다.
student_score의 원소는 '92'처럼 문자열이고, 파이썬 3에서 문자열과 정수의 크기 비교(>=)는 TypeError를 일으킨다.
따라서 네 번 모두 except로 가서 'F'만 추가되고, i += 1은 실행되지 않아 i는 0으로 남는다. student_list[0]은 'A', student_grade[0]은 'F'이다.
- 등급 문자열(D+ 등)이 출력되려면 비교가 정상 수행되어야 하나, 모든 비교가 예외로 끝난다.
- D가 출력되려면 i가 증가해야 하나, 증가문 앞에서 예외가 발생한다.