프로그래밍 언어 활용 · 오답노트
2025년 3회
C 언어에서 산술 연산자가 아닌 것은?
핵심 해설
C 언어의 연산자는 기능에 따라 산술, 관계, 논리, 비트, 대입, 조건 연산자 등으로 나뉜다. 산술 연산자는 수치 계산을 수행하는 +, -, *, /, % 다섯 가지이며, 이 중 %는 정수 나눗셈의 나머지를 구하는 모듈로 연산자다. 반면 <<와 >>는 피연산자의 이진 비트를 왼쪽·오른쪽으로 밀어내는 비트 시프트 연산자로, &(AND), |(OR), ^(XOR), ~(NOT)과 함께 비트 연산자 범주에 속한다. 따라서 산술 연산자가 아닌 것은 <<이다.
보기별 해설
정리
다음 C 언어 프로그램의 결과로 옳은 것은? #include <stdio.h> main( ) { int i = 0; while (1) { if (i == 4) break; i++; } printf(“%d”, i); }
핵심 해설
while(1)은 조건이 항상 참인 무한 루프이므로 탈출은 오직 break로만 이루어진다. 루프 안에서는 i가 4인지 먼저 검사하고, 아니면 i를 1 증가시킨다. i 값을 추적하면 i=0(≠4) → i=1, i=1(≠4) → i=2, i=2(≠4) → i=3, i=3(≠4) → i=4, 그리고 다음 반복에서 i==4가 참이 되어 증가 없이 break로 빠져나온다. 탈출 시점의 i는 4이므로 printf는 4를 출력한다. 실제 gcc로 컴파일해 실행해도 4가 나온다.
보기별 해설
정리
다음 중 IP 버전에 대한 설명 중 틀린 것은?
핵심 해설
IPv4는 32비트 주소를 8비트(옥텟) 단위로 넷으로 끊어 점(.)으로 구분해 십진수로 표기하고, 네트워크 부분의 길이에 따라 A~E 5개 클래스로 나뉜다. IPv6는 128비트 주소를 16비트씩 8개 필드로 나누어 콜론(:)으로 구분하고 16진수로 표기한다. IPv6는 기본 헤더를 40바이트로 고정·단순화하고 체크섬 필드를 없애 라우터의 처리 부담을 줄였으며, 흐름 레이블(Flow Label)로 QoS를 지원하므로 전송 속도 면에서 IPv4보다 유리하다. 따라서 IPv6가 IPv4보다 느리다는 4번이 틀린 설명이다.
보기별 해설
정리
정수를 입력받아 처리하는 다음 C 언어 프로그램에서 괄호에 들어갈 알맞은 코드는? #include <stdio.h> int main(void) { int n, sum = 3; ( ) sum = sum + n; printf(“%d”, sum); }
핵심 해설
scanf는 입력받은 값을 저장할 '주소'를 인수로 받아야 하므로, 일반 변수에는 반드시 주소 연산자 &를 붙여 &n 형태로 전달해야 한다. 또 서식 지정자는 변수의 자료형과 일치해야 하는데, n은 int로 선언되었으므로 정수를 뜻하는 %d를 써야 한다. 실수용 %f를 int 변수에 쓰면 4바이트 정수 자리에 실수 표현이 기록되어 값이 깨진다. 두 조건을 모두 만족하는 것은 scanf("%d", &n);이다.
보기별 해설
정리
다음은 n각형을 화면에 그리는 프로그램을 Python으로 구현한 것이 다괄호. (㉠㉢~ )에 들어갈 알맞은 코드는? import turtle ( ㉠ ) shape(distance, n): t = turtle.Turtle( ) for i in range(n): t.( ㉡ ) t.( ㉢ ) shape(100, 5)
핵심 해설
지문은 PDF 추출로 어절이 뒤섞였지만 '괄호 ㉠~㉢에 들어갈 코드'를 묻는 문항으로, turtle 모듈로 정n각형을 그리는 함수를 완성하는 문제다. ㉠은 shape(distance, n)이라는 함수를 정의하는 자리이므로 파이썬의 함수 정의 키워드 def가 들어간다(class는 클래스를 정의하는 키워드라 인수를 받는 함수 형태와 맞지 않는다). ㉡은 거북이를 distance만큼 전진시키는 forward(distance), ㉢은 회전각으로, 정n각형은 외각의 합이 360도이므로 한 꼭짓점마다 360/n도씩 돌아야 한다. 이때 //는 몫만 남기는 정수 나눗셈이고 ///라는 연산자는 파이썬에 존재하지 않아 SyntaxError가 나므로, 올바른 조합은 def, forward(distance), left(360//n)이다.
보기별 해설
정리
다음 JAVA 프로그램이 실행되었을 때의 결과는? public class ovr { public static void main(String[ ] args) { int a = 1, b = 2, c = 3, d = 4; int mx, mn; mx = a < b ? b : a; if (mx == 1) { mn = a > mx ? b : a; } else { mn = b < mx ? d : c; } System.out.println(mn); } }
핵심 해설
삼항 연산자 조건 ? A : B는 조건이 참이면 A, 거짓이면 B를 반환한다. 값을 단계적으로 추적하면 a=1, b=2, c=3, d=4에서 먼저 mx = a < b ? b : a이므로 1 < 2가 참이 되어 mx = b = 2가 된다. 다음 if(mx == 1)은 mx가 2이므로 거짓이라 else 블록이 실행되고, 여기서 mn = b < mx ? d : c를 계산한다. b=2, mx=2이므로 2 < 2는 거짓이 되어 mn = c = 3이 된다. 따라서 출력은 3이며, 실제 javac로 컴파일해 실행해도 3이 나온다.
보기별 해설
정리
개발 환경 구성을 위한 빌드(Build) 도구에 해당하지 않는 것은?
핵심 해설
빌드 도구는 소스 코드의 컴파일, 라이브러리 의존성 관리, 테스트 실행, 패키징·배포를 자동화하는 개발 환경 구성 도구다. 자바 진영의 대표적 빌드 도구로는 XML 스크립트 기반의 Ant, 의존성 자동 관리와 표준 디렉터리 구조를 제공하는 Maven, Groovy/Kotlin DSL로 유연성과 속도를 높인 Gradle이 있다. 반면 Kerberos는 대칭키 암호와 티켓(Ticket)을 사용해 네트워크상에서 사용자와 서비스를 인증하는 인증 프로토콜로, 빌드와는 전혀 무관한 보안 기술이다. 따라서 빌드 도구가 아닌 것은 Kerberos다.
보기별 해설
정리
프로세스와 관련한 설명으로 틀린 것은?
핵심 해설
프로세스는 실행 중인 프로그램으로 자원 할당의 단위이고, 스레드는 그 프로세스 안에서 실행되는 흐름(제어)의 단위다. 즉 하나의 프로세스가 여러 스레드를 포함하는 포함 관계이며, 각 스레드는 코드·데이터·힙 영역은 프로세스와 공유하되 자신만의 실행 스택과 레지스터·PC를 따로 갖는다. 4번은 이 포함 관계를 정반대로 서술했을 뿐 아니라 스택이 없다는 설명까지 틀렸으므로 옳지 않다.
보기별 해설
정리
다음 중 가장 약한 결합도(Coupling)는?
핵심 해설
결합도(Coupling)는 모듈 간 상호 의존 정도로, 낮을수록 좋은 설계다. 강한 것부터 약한 순서는 내용(Content) > 공통(Common) > 외부(External) > 제어(Control) > 스탬프(Stamp) > 자료(Data)이며, 이 순서를 '내공외제스자'로 외운다. 보기 중 자료 결합도가 없으므로 남은 넷 가운데 가장 순서상 뒤에 있는, 즉 가장 약한 것은 스탬프 결합도다. 스탬프 결합도는 배열이나 구조체 같은 자료 구조를 통째로 넘기는 형태로, 개별 원소만 넘기는 자료 결합도 바로 위 단계다.
보기별 해설
정리
C 언어에서 변수로 사용할 수 없는 것은?
핵심 해설
C 언어의 식별자(변수 이름) 규칙은 영문자·숫자·밑줄(_)만 사용할 수 있고, 첫 글자에 숫자를 쓸 수 없으며, 대소문자를 구분하고, 예약어(keyword)는 쓸 수 없다는 것이다. short는 int, char, float, double, long, unsigned 등과 함께 C의 자료형 예약어이므로 변수 이름으로 쓰면 컴파일 오류가 난다. 나머지 셋은 문자·숫자·밑줄만 쓰였고 숫자로 시작하지도 않으므로 모두 유효한 식별자다.
보기별 해설
정리
순차 파일에 대한 설명으로 옳지 않은 것은?
핵심 해설
순차 파일(Sequential File)은 레코드를 논리적 순서에 따라 저장 매체에 연속으로 기록하는 방식이다. 빈 공간 없이 붙여 저장하므로 기억 공간 이용률이 높고, 처음부터 차례로 읽어 나가므로 자기 테이프 같은 순차 매체를 포함한 어떤 매체에도 적용할 수 있으며 대량 일괄 처리에 유리하다. 그러나 레코드가 물리적으로 연속되어 있어 중간에 삽입·삭제하려면 뒤쪽 레코드를 모두 밀어야 하고, 실제로는 파일 전체를 다시 복사해 재구성해야 한다. 따라서 재구성이 필요 없다는 4번이 옳지 않다.
보기별 해설
정리
다음과 같은 형태로 임계 구역의 접근을 제어하는 상호배제 기법은? P(S) : while S < = 0 do skip; S := S – 1; V(S) : S := S + 1;
핵심 해설
제시된 코드는 다익스트라가 제안한 세마포어(Semaphore)의 P 연산(wait)과 V 연산(signal)의 고전적 정의다. P(S)는 세마포어 변수 S가 0 이하인 동안 대기(skip)하다가 양수가 되면 S를 1 감소시켜 임계 구역에 진입하고, V(S)는 임계 구역을 빠져나올 때 S를 1 증가시켜 대기 중인 프로세스에 자원을 넘긴다. 즉 S는 사용 가능한 자원의 개수를 나타내는 정수형 변수이며, S를 1로 초기화하면 이진 세마포어로서 상호배제를 구현한다. 반면 데커·램포트·피터슨 알고리즘은 별도의 플래그와 turn 변수만으로 상호배제를 구현하는 소프트웨어 알고리즘이라 P/V 연산 형태와 맞지 않는다.
보기별 해설
정리
다음 파이썬 코드에서 ‘53t44’를 입력했을 때 출력 결과는? a, b = map(int, input( ).split(“t”)); print(a, b)
핵심 해설
input()은 입력을 문자열로 받으므로 '53t44'가 통째로 들어온다. split("t")는 't'를 구분자로 삼아 문자열을 잘라 리스트 ['53', '44']를 만들고, map(int, ...)는 각 원소에 int를 적용해 [53, 44]로 변환한다. 언패킹으로 a=53, b=44가 대입되고, print(a, b)는 여러 인수를 출력할 때 기본 구분자 sep가 공백이므로 두 값 사이에 공백 하나를 넣어 '53 44'를 출력한다. 실제 python3로 실행해도 53 44가 나온다.
보기별 해설
정리
네트워크 장비에 대한 설명으로 옳지 않은 것은?
핵심 해설
네트워크 장비는 동작하는 OSI 계층으로 구분한다. 물리 계층에는 리피터와 허브, 데이터 링크 계층에는 브리지와 스위치, 네트워크 계층에는 라우터와 L3 스위치, 그 위 계층까지 다루는 것으로 게이트웨이가 있다. 1번이 설명하는 '약해지거나 왜곡된 신호를 원래 형태로 재생해 다시 전송하는 장비'는 물리 계층의 리피터(Repeater)이며, 브라우터(Brouter)는 브리지와 라우터를 합친 장비로 라우팅 가능한 프로토콜은 라우터처럼, 그렇지 않은 프로토콜은 브리지처럼 처리하는 복합 장비다. 따라서 브라우터를 리피터의 정의로 설명한 1번이 옳지 않다.
보기별 해설
정리
HTTP의 잘 알려진(Well Known) 포트 번호는?
핵심 해설
잘 알려진 포트(Well-Known Port)는 0~1023번 범위로 IANA가 주요 서비스에 지정해 둔 번호다. HTTP는 웹 문서를 주고받는 응용 계층 프로토콜로 TCP 80번을 사용하며, 여기에 TLS 암호화를 더한 HTTPS는 443번을 쓴다. 나머지 보기도 모두 실제 존재하는 잘 알려진 포트지만 각각 Telnet(23), DNS(53), HTTPS(443)에 해당하므로 HTTP의 포트는 80이다.
보기별 해설
정리
배치 프로그램의 필수 요소에 대한 설명으로 틀린 것은?
핵심 해설
배치 프로그램의 필수 요소는 대용량 데이터, 자동화, 견고성(Robustness), 안정성/신뢰성(Stability), 성능(Performance) 다섯 가지다. 이 중 성능은 다른 애플리케이션을 방해하지 않으면서 주어진 시간 안에 처리를 완료해야 한다는 요건이고, 안정성은 오류가 언제 어디서 발생했는지 추적할 수 있어야 한다는 요건이며, 견고성은 잘못된 데이터나 중복 데이터가 들어와도 중단되지 않고 처리하는 성질이다. 4번은 성능의 정의를 '무결성'이라는 이름으로 잘못 붙였고, 무결성은 애초에 배치 프로그램 필수 요소 목록에 없으므로 틀린 설명이다.
보기별 해설
정리
빈 기억공간의 크기가 20K, 16K, 8K, 40K일 때 기억장치 배치 전략으로 “Worst Fit”을 사용하여 17K의 프로그램을 적재할 경우 내부 단편화의 크기는?
핵심 해설
Worst Fit(최악 적합)은 사용 가능한 빈 공간 중 가장 큰 곳에 프로그램을 배치하는 전략이다. 빈 공간이 20K, 16K, 8K, 40K이므로 17K 프로그램은 가장 큰 40K 영역에 적재된다. 내부 단편화는 할당된 분할 안에서 실제로 쓰이지 않고 남은 공간을 뜻하므로 40K - 17K = 23K가 된다. 참고로 First Fit이면 첫 번째로 만나는 20K에 배치해 3K, Best Fit이면 17K보다 크면서 가장 작은 20K에 배치해 역시 3K의 내부 단편화가 생긴다.
보기별 해설
정리
IPv4와 IPv6 간의 주소 전환에 사용되는 기술이 아닌 것은?
핵심 해설
IPv4에서 IPv6로 넘어가는 과도기에 두 프로토콜을 공존시키는 전환(transition) 기술은 듀얼 스택, 터널링, 헤더 변환(주소 변환) 세 가지다. 듀얼 스택은 한 장비에 두 프로토콜 스택을 모두 올려 상대에 맞춰 골라 쓰고, 터널링은 IPv6 패킷을 IPv4 패킷 속에 캡슐화해 IPv4망을 통과시키며, 헤더 변환은 IPv4 헤더와 IPv6 헤더를 서로 바꿔 주는 방식이다. 라우팅은 목적지까지의 최적 경로를 결정하는 네트워크 계층의 일반적인 경로 선택 기능일 뿐 버전 간 주소 전환 기술이 아니므로 답은 4번이다.
보기별 해설
정리
JAVA에서 변수와 자료형에 대한 설명으로 틀린 것은?
핵심 해설
자바의 기본형(primitive type)은 정수형 byte(1바이트), short(2바이트), int(4바이트), long(8바이트), 실수형 float(4바이트), double(8바이트), 문자형 char(2바이트), 논리형 boolean 여덟 가지다. 즉 실수형에 속하는 것은 float과 double 둘뿐이며, short와 byte는 크기가 작은 정수형이다. 3번은 정수형인 short와 byte를 실수형으로 분류했으므로 틀린 설명이다.
보기별 해설
정리
다음 중 HRN에 대한 설명으로 옳지 않은 것은?
핵심 해설
HRN(Highest Response ratio Next)은 실행 시간이 짧은 작업만 계속 선택해 긴 작업이 무한정 밀리는 SJF의 기아(starvation) 현상을 보완하려고 대기 시간을 우선순위에 반영한 비선점 스케줄링 기법이다. 우선순위 계산식은 (대기 시간 + 서비스 시간) ÷ 서비스 시간이며, 이 값이 클수록 우선순위가 높다. 예를 들어 대기 20·서비스 10인 작업은 (20+10)/10 = 3, 대기 10·서비스 10인 작업은 (10+10)/10 = 2가 되어 앞의 작업이 먼저 선택된다. 따라서 값이 낮을수록 우선순위가 높다고 한 3번이 옳지 않다.