프로그래밍 언어 활용 · 오답노트
2025년 1회
IP 주소체계와 관련한 설명으로 틀린 것은?
핵심 해설
IPv6는 주소 길이가 128비트(16 octet)로 IPv4의 32비트(4 octet)보다 크게 확장된 체계이다. IPv6의 기본 헤더는 40 octet(320비트) 고정 길이이며, 옵션은 기본 헤더 뒤에 확장 헤더(Extension Header)로 붙는 구조라서 헤더 필드 수가 IPv4보다 오히려 단순하다. 참고로 IPv4 헤더는 20~60 octet의 가변 길이이다. 따라서 '32 octet 고정 길이'라고 한 1번이 틀린 설명이다.
보기별 해설
정리
효과적인 모듈 설계를 위한 유의사항으로 거리가 먼 것은?
핵심 해설
좋은 모듈 설계의 목표는 모듈의 독립성을 높이는 것이고, 독립성은 결합도(Coupling)는 낮추고 응집도(Cohesion)는 높일 때 커진다. 결합도는 모듈 사이의 상호 의존 정도이므로 결합도가 강해질수록 한 모듈을 고칠 때 다른 모듈까지 영향을 받아 독립성이 떨어진다. 따라서 '결합도를 강하게 하면 독립성이 향상된다'는 1번은 방향이 정반대로 서술된 틀린 항목이다. 나머지는 복잡도·중복 최소화, 예측 가능한 기능, 유지보수 용이성으로 모두 올바른 모듈 설계 지침이다. (4번 끝의 '4'는 PDF 추출 과정에서 붙은 페이지 번호 잡음이다.)
보기별 해설
정리
다음 C 언어 프로그램이 실행되었을 때실행, 결과는? #include <stdio.h> struct st { int a; int c[10]; }; int main(int argc, char* argv[]) { int i = 0; struct st ob1; struct st ob2; ob1.a = 0; ob2.a = 0; for (i = 0; i < 10; i++) { ob1.c[i] = i; ob2.c[i] = ob1.c[i] + i; } for (i = 0; i < 10; i = i + 2) { ob1.a = ob1.a + ob1.c[i]; ob2.a = ob2.a + ob2.c[i]; } printf("%d", ob1.a + ob2.a); return 0; }
핵심 해설
구조체 배열의 값을 채운 뒤 짝수 인덱스만 골라 더하는 문제이다. 첫 반복문에서 i=0~9 동안 ob1.c[i] = i가 되어 ob1.c는 {0,1,2,...,9}, ob2.c[i] = ob1.c[i] + i = 2i가 되어 ob2.c는 {0,2,4,...,18}이 된다. 두 번째 반복문은 i를 2씩 증가시키므로 i = 0, 2, 4, 6, 8만 누적한다. ob1.a = 0+2+4+6+8 = 20, ob2.a = 0+4+8+12+16 = 40이므로 ob1.a + ob2.a = 60이 출력된다(gcc 실행 결과 60).
보기별 해설
정리
다음 중 C 언어에서 우선 순위가 가장 높은 것은?
핵심 해설
C 언어 연산자 우선순위는 단항 → 산술 → 시프트 → 관계 → 비트 → 논리 → 조건 → 대입 → 콤마 순으로 낮아진다. 보기의 네 부류만 놓고 보면 산술 연산자(*, /, %, +, -)가 가장 높고, 그다음이 시프트(<<, >>), 그다음이 관계(<, >, <=, >=, ==, !=), 마지막이 비트 연산자(&, ^, |)이다. 즉 a & b + 1은 a & (b + 1)로, a < b << 2는 a < (b << 2)로 해석된다. 따라서 우선순위가 가장 높은 것은 4번 산술 연산자이다.
보기별 해설
정리
다음 파이썬 코드에서 ‘53t44’를 입력했을 때 출력 결과는? a, b = map(int, input().split("t")); print(a, b)
핵심 해설
input()으로 읽은 문자열 '53t44'에 split("t")를 적용하면 구분자 't'를 기준으로 잘려 ['53', '44'] 리스트가 된다. map(int, ...)이 각 요소를 정수로 변환하고, 언패킹으로 a = 53, b = 44가 대입된다. print는 여러 인수를 출력할 때 기본 구분자 sep=' '(공백 한 칸)을 넣으므로 '53 44'가 출력된다. 실제 python3 실행 결과도 53 44이다.
보기별 해설
정리
흐름 제어(Flow Control)에 대한 설명으로 옳지 않은 것은?
핵심 해설
흐름 제어는 송신 측이 수신 측의 처리 능력을 넘는 속도로 데이터를 보내 버퍼 오버플로가 생기는 것을 막는 기법으로, 정지-대기(Stop-and-Wait)와 슬라이딩 윈도우(Sliding Window)가 대표적이다. 슬라이딩 윈도우에서 윈도우 크기는 ACK 없이 연속 전송할 수 있는 프레임 수를 뜻하며, ACK가 정상적으로 도착하면 윈도우를 늘리고 NAK(부정 응답)나 타임아웃으로 전송 오류·혼잡이 감지되면 윈도우를 줄인다. 따라서 NAK가 오면 윈도우 크기가 증가한다고 한 4번이 옳지 않다. (1번의 '정지대기는-'은 PDF 추출 과정에서 '정지-대기는'의 하이픈 위치가 어긋난 것이다.)
보기별 해설
정리
다음 C 언어 프로그램이 실행되었을 때의 결과는? #include <stdio.h> int main(void) { int n = 4; int* pt = NULL; pt = &n; printf("%d", &n + *pt - *&pt + n); return 0; }
핵심 해설
포인터 산술식을 항 단위로 풀어야 한다. n = 4, pt = &n이므로 *pt는 n의 값 4, *&pt는 pt 자신 즉 &n이다. 식 &n + *pt - *&pt + n은 (&n + 4) - (&n) + 4로 정리되는데, 앞의 두 항은 int* 끼리의 뺄셈이므로 결과는 바이트 차이가 아니라 원소 개수 차이인 4가 된다. 여기에 마지막 n = 4를 더해 4 + 4 = 8이 출력된다(gcc 실행 결과 8).
보기별 해설
정리
커널의 버전을 확인할 때 사용하는 리눅스 명령어는?
핵심 해설
리눅스에서 시스템 정보와 커널 버전을 확인하는 명령은 uname이다. uname -r은 커널 릴리스(버전) 번호를, uname -a는 커널 이름·호스트명·릴리스·빌드 정보·아키텍처를 한꺼번에 출력한다. 나머지 보기는 디렉터리 목록 확인, 권한 변경, 파일 삭제 명령으로 커널 정보와는 무관하다. (보기 4번의 'uname - 5'에서 '5'는 PDF 추출 시 붙은 페이지 번호 잡음이며 원래는 'uname'이다.)
보기별 해설
정리
시간 구역성(Temporal Locality)과 거리가 먼 것은?
핵심 해설
구역성(Locality)은 프로세스가 실행 중 특정 부분만 집중적으로 참조하는 성질로, 시간 구역성과 공간 구역성으로 나뉜다. 시간 구역성(Temporal Locality)은 한 번 참조한 기억 장소를 가까운 미래에 다시 참조하는 성질로 루프(Loop), 서브루틴(Subroutine), 스택(Stack), 카운팅·집계에 사용되는 변수가 대표 예이다. 공간 구역성(Spatial Locality)은 참조한 위치와 인접한 위치를 곧이어 참조하는 성질로 배열 순회(Array Traversal), 순차 코드 실행, 프로그램의 순차적 수행이 해당된다. 따라서 배열 순회를 든 3번이 시간 구역성과 거리가 멀다.
보기별 해설
정리
다음 C언어 프로그램이 실행되었을 때의 결과는? #include <stdio.h> main() { char* s = "Sinagong"; for (int i = 5; i > 0; i--) printf("%c", *(s + i)); }
핵심 해설
문자열 "Sinagong"은 인덱스 0부터 S(0), i(1), n(2), a(3), g(4), o(5), n(6), g(7)로 저장된다. *(s + i)는 s[i]와 같으므로 i를 5부터 1까지 1씩 줄이며 출력하면 s[5]=o, s[4]=g, s[3]=a, s[2]=n, s[1]=i 순서가 된다. 조건이 i > 0이라 i = 0(문자 'S')은 출력되지 않는다. 이어 붙이면 "ogani"이며, gcc 실행 결과도 ogani이다.
보기별 해설
정리
OSI 7계층 모델에서 전송에 필요한 장치 간의 실제 접속과 절단 등 기계적전기적기능적절차적, , , 특성을 정의한 계층은?
핵심 해설
문제 지문의 '기계적전기적기능적절차적, , ,'는 PDF 추출 과정에서 어절 순서가 깨진 것으로, 원문은 '기계적, 전기적, 기능적, 절차적 특성'이다. OSI 7계층에서 장치 간 실제 접속과 절단, 즉 전송 매체와 물리적 연결의 기계적·전기적·기능적·절차적 특성을 규정하는 계층은 물리 계층(Physical Layer, 1계층)이다. 물리 계층은 비트를 전기 신호로 바꿔 전송하며 커넥터 모양, 핀 배치, 전압 레벨, 전송 속도 등을 정의한다. 따라서 답은 1번이다.
보기별 해설
정리
다음 자바 코드를 실행한 결과는? int x=1, y=6; while (y--) { x++; } System.out.println(“x=” x+“y=” y);
핵심 해설
Java는 C와 달리 조건식에 반드시 boolean 타입만 올 수 있고 정수를 참·거짓으로 자동 변환하지 않는다. while (y--)에서 y--는 int 값을 반환하므로 컴파일러가 'int cannot be converted to boolean' 오류를 내고, 이클립스 등에서 실행하면 'Unresolved compilation problem'이 발생한다. 더구나 출력문의 System.out.println("x=" x + "y=" y)도 문자열과 변수 사이에 연결 연산자 +가 빠져 있어 문법 오류이다. 따라서 실행 결과가 아니라 컴파일 오류가 답이며 4번이 옳다. C였다면 y가 0이 될 때 거짓이 되어 x=7, y=-1이 되지만 Java에서는 그 값을 계산할 기회조차 없다.
보기별 해설
정리
UNIX에서 새로운 프로세스를 생성하는 명령어는?
핵심 해설
UNIX에서 새로운 프로세스를 만드는 시스템 호출은 fork이다. fork는 현재 실행 중인 프로세스(부모)를 그대로 복제해 자식 프로세스를 생성하며, 부모에게는 자식의 PID를, 자식에게는 0을 반환한다. 보통 fork로 프로세스를 만든 뒤 exec 계열 호출로 자식의 메모리 이미지를 다른 프로그램으로 바꾸는 방식(fork-exec)을 사용한다. 나머지 보기는 파일 목록 출력, 파일 내용 출력, 권한 변경 명령이므로 프로세스 생성과 무관하다.
보기별 해설
정리
128.107.176.0/22 네트워크에서 호스트에 의해 사용될 수 있는 서브넷 마스크는?
핵심 해설
CIDR 표기 /22는 서브넷 마스크에서 앞쪽 1비트가 22개라는 뜻이다. 32비트를 8비트씩 끊어 11111111.11111111.11111100.00000000로 쓰면 첫 옥텟 8개, 둘째 옥텟 8개로 16비트를 채우고 셋째 옥텟에서 6비트를 더 채워 22비트가 된다. 셋째 옥텟 11111100은 128+64+32+16+8+4 = 252이므로 서브넷 마스크는 255.255.252.0이다. 호스트 비트는 32-22 = 10비트라 서브넷당 2^10 = 1024개 주소, 실사용 호스트는 네트워크·브로드캐스트 주소를 뺀 1022개이다.
보기별 해설
정리
다음 C 언어 프로그램이 실행되었을 때실행, 결과는? #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { char str1[20] = "KOREA"; char str2[20] = "LOVE"; char* p1 = NULL; char* p2 = NULL; p1 = str1; p2 = str2; str1[1] = p2[2]; str2[3] = p1[4]; strcat(str1, str2); printf("%c", *(p1 + 2)); return 0; }
핵심 해설
포인터로 문자 배열을 조작한 뒤 특정 위치의 문자를 출력하는 문제이다. p1 = str1("KOREA"), p2 = str2("LOVE")로 두 포인터가 각 배열의 시작을 가리킨다. str1[1] = p2[2]는 str2[2]인 'V'를 str1[1]에 넣어 str1이 "KVREA"가 되고, str2[3] = p1[4]는 이제 바뀐 str1의 인덱스 4인 'A'를 str2[3]에 넣어 str2가 "LOVA"가 된다. strcat(str1, str2)로 str1은 "KVREALOVA"가 되지만 출력하는 것은 *(p1 + 2) 즉 str1[2]로, 이 위치는 처음부터 바뀌지 않은 'R'이다(gcc 실행 결과 R).
보기별 해설
정리
다음과 같은 세그먼트 테이블을 가지는 시스템에서 논리 주소(2, 176)에 대한 물리 주소는? 세그먼트번호 시작주소 길이바이트( ) 0 670 248 1 1752 422 2 222 198 3 996 604
핵심 해설
세그먼테이션 기법의 논리 주소는 (세그먼트 번호 s, 변위 d) 쌍으로 주어지고, 물리 주소는 세그먼트 테이블에서 s번 항목의 시작 주소(base)를 찾아 변위 d를 더해 구한다. 이때 d가 해당 세그먼트의 길이(limit)보다 작아야 하며, 크거나 같으면 트랩(세그먼트 위반)이 발생한다. 논리 주소 (2, 176)에서 세그먼트 2의 시작 주소는 222, 길이는 198이고 변위 176 < 198이므로 유효하다. 따라서 물리 주소는 222 + 176 = 398이다.
보기별 해설
정리
스크립트(Script) 언어가 아닌 것은?
핵심 해설
스크립트 언어는 별도의 컴파일 과정 없이 인터프리터가 소스를 한 줄씩 해석해 실행하는 언어로, 웹 서버나 응용 프로그램 내부에서 다른 프로그램을 제어·연결하는 데 주로 쓰인다. PHP, Python, JavaScript, Basic, Perl, Ruby, ASP, JSP 등이 여기에 속한다. 반면 Fortran은 1957년에 등장한 최초의 고급 컴파일러 언어로, 소스 전체를 기계어로 번역한 뒤 실행하는 컴파일 언어이며 과학·공학 수치 계산에 특화되어 있다. 따라서 스크립트 언어가 아닌 것은 2번이다.
보기별 해설
정리
한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 참조하는 경우의 결합도는?
핵심 해설
결합도는 약한 것부터 자료(Data) → 스탬프(Stamp) → 제어(Control) → 외부(External) → 공통(Common) → 내용(Content) 순으로 강해지며, 결합도가 강할수록 모듈 독립성이 나빠진다. 이 중 한 모듈이 다른 모듈의 내부 기능(코드)이나 내부 자료를 직접 참조·변경하는 경우가 내용 결합도로, 가장 강하고 가장 피해야 할 결합이다. 다른 모듈의 지역 변수에 직접 접근하거나 실행 중간 지점으로 분기(goto)하는 것이 전형적인 예이다. 따라서 답은 1번이다.
보기별 해설
정리
파일 디스크립터(File Descriptor)에 대한 설명으로 틀린 것은?
핵심 해설
파일 디스크립터는 파일마다 하나씩 존재하며 파일 관리에 필요한 정보를 모아 둔 제어 블록으로, 파일 제어 블록(FCB, File Control Block)이라고도 한다. 파일 이름, 파일 크기, 보조기억장치에서의 위치, 파일 구조와 접근 제어 정보, 생성 일시와 최종 수정 일시 등을 담는다. 평소에는 보조기억장치에 저장되어 있다가 파일이 개방(open)될 때 주기억장치로 옮겨지는데, 4번은 이 이동 방향을 정반대로 서술했으므로 틀렸다. 또한 파일 디스크립터는 운영체제가 관리하는 정보이므로 사용자가 직접 참조하거나 수정할 수 없다.
보기별 해설
정리
C 언어 라이브러리 중 stdlib.h에 대한 설명으로 옳은 것은?
핵심 해설
stdlib.h는 C의 표준 유틸리티 라이브러리로 자료형 변환, 동적 메모리 할당, 난수 생성, 프로세스 제어, 정렬·검색 함수를 제공한다. 문자열을 수치로 바꾸는 atoi·atof·atol·strtol, 수치를 문자열로 바꾸는 itoa 계열이 여기에 속하며, malloc·calloc·free, rand·srand, exit·system, qsort·bsearch도 stdlib.h에 선언되어 있다. 나머지 보기는 각각 string.h, stdio.h, math.h에 대한 설명이므로 1번만 옳다. (4번의 '삼각 함수제곱근지수, , 등'은 PDF 추출 시 어절 순서가 깨진 것으로 원문은 '삼각 함수, 제곱근, 지수 등'이다.)