정처기 실기시험일 2025년 4월 19일· 20문항전문가 검수

[정보처리기사 실기] 2025년 1회 기출 복원

정보처리기사 실기 2025년 1회 기출 복원 20문항. 정답·해설을 펼쳐보고 직접 풀어볼 수도 있습니다.

안녕하세요. 문어입니다 🐙


정보처리기사 실기 2025년 1회차 기출 복원입니다. 각 문제 아래의 「정답·해설 보기」를 펼치면 정답과 해설이 나타나요. 실제 시험 환경(타이머·자동 채점·오답 누적)에서 풀어보고 싶다면 글 맨 아래 「직접 풀러가기」를 눌러주세요.

  1. 문제 1

    4지선다

    다음 설명에 해당하는 네트워크 공격 기법으로 가장 적절한 것은?

    <설명> 정상 사용자의 세션 상태를 탈취하거나 도용하여 인증 없이 통신을 가로채는 공격 기법이다. TCP 연결이 수립된 이후 공격자가 시퀀스 번호 등을 조작해 정상 세션을 장악하는 방식이 대표적이다.

    • 1.세션 하이재킹
    • 2.스니핑
    • 3.스푸핑
    • 4.랜드 어택
    정답·해설 보기

    정답

    1. 세션 하이재킹

    해설

    정답: 1. 세션 하이재킹은 정상 사용자의 세션을 가로채 권한을 탈취하는 공격 기법이다.

    오답 풀이

    • 1번: 세션을 탈취하거나 도용하는 공격이므로 정답이다.
    • 2번: 스니핑은 네트워크 패킷을 몰래 엿보는 행위이다.
    • 3번: 스푸핑은 IP, MAC, DNS 등을 위조하는 공격이다.
    • 4번: 랜드 어택은 출발지와 목적지 IP를 같게 조작하는 DoS 공격이다.

    보충 개념 세션 하이재킹은 인증 이후의 세션을 탈취한다는 점이 핵심이다. TCP 세션 하이재킹은 시퀀스 번호 예측이나 조작을 이용할 수 있다.

  2. 문제 2

    4지선다

    다음 제약조건 설명과 용어의 연결로 가장 적절한 것은?

    <설명> ㄱ. 특정 속성에 입력될 수 있는 값의 범위나 형식을 제한한다. ㄴ. 기본키는 NULL이 될 수 없고 중복될 수 없다는 무결성이다. ㄷ. 외래키 값은 참조하는 부모 테이블의 값과 일관성을 유지해야 한다.

    <보기> 개체, 참조, 도메인

    • 1.ㄱ-도메인, ㄴ-개체, ㄷ-참조
    • 2.ㄱ-개체, ㄴ-도메인, ㄷ-참조
    • 3.ㄱ-참조, ㄴ-개체, ㄷ-도메인
    • 4.ㄱ-도메인, ㄴ-참조, ㄷ-개체
    정답·해설 보기

    정답

    1. ㄱ-도메인, ㄴ-개체, ㄷ-참조

    해설

    정답: 1. 값의 범위 제한은 도메인 무결성, 기본키 관련 제약은 개체 무결성, 외래키 관련 제약은 참조 무결성이다.

    오답 풀이

    • 1번: 세 무결성의 의미가 모두 올바르게 연결되었다.
    • 2번: ㄱ과 ㄴ의 연결이 바뀌었다.
    • 3번: ㄱ과 ㄷ의 연결이 바뀌었다.
    • 4번: ㄴ과 ㄷ의 연결이 바뀌었다.

    보충 개념 개체 무결성은 기본키, 참조 무결성은 외래키, 도메인 무결성은 속성 값의 범위와 형식 제약과 관련된다.

  3. 문제 3

    4지선다

    다음 설명에 해당하는 오류 검출 기법의 영문 약자로 가장 적절한 것은?

    <설명> 데이터 전송이나 저장 과정에서 오류를 감지하기 위해 사용하는 오류 검출 코드이다. 데이터에 검사 값을 추가하고, 수신 또는 읽기 시 다시 계산하여 데이터 변경 여부를 확인한다. 정해진 다항식을 기반으로 2진수 나눗셈을 수행하고 나머지를 검사 값으로 사용한다.

    • 1.CRC
    • 2.MAC
    • 3.ARP
    • 4.RARP
    정답·해설 보기

    정답

    1. CRC

    해설

    정답: 1. CRC는 순환 중복 검사로, 다항식 나눗셈의 나머지를 이용해 오류를 검출한다.

    오답 풀이

    • 1번: 데이터 오류 검출 기법이므로 정답이다.
    • 2번: MAC은 매체 접근 제어 또는 메시지 인증 코드 등 다른 의미로 쓰인다.
    • 3번: ARP는 IP 주소를 MAC 주소로 변환하는 프로토콜이다.
    • 4번: RARP는 MAC 주소를 IP 주소로 변환하는 프로토콜이다.

    보충 개념 CRC는 네트워크 프레임, 저장 장치 등에서 데이터 무결성 검사용으로 사용된다. 오류 정정이 아니라 오류 검출에 초점이 있다.

  4. 문제 4

    4지선다

    다음 설명에 해당하는 악성 소프트웨어 유형으로 가장 적절한 것은?

    <설명> 사용자에게 가짜 바이러스 경고나 시스템 문제를 보여 주어 공포심을 유발하고, 불필요한 결제나 소프트웨어 설치를 유도한다. '겁을 주다'라는 의미에서 유래한 용어이다.

    • 1.애드웨어
    • 2.스캐어웨어
    • 3.그룹웨어
    • 4.컴포넌트웨어
    정답·해설 보기

    정답

    2. 스캐어웨어

    해설

    정답: 2. 스캐어웨어는 사용자의 불안과 공포를 이용해 결제나 설치를 유도하는 악성 소프트웨어 유형이다.

    오답 풀이

    • 1번: 애드웨어는 광고를 노출하는 소프트웨어이다.
    • 2번: 공포심을 이용하는 악성 소프트웨어이므로 정답이다.
    • 3번: 그룹웨어는 협업 지원 소프트웨어이다.
    • 4번: 컴포넌트웨어는 소프트웨어 부품화 개념과 관련된다.

    보충 개념 스캐어웨어는 사회공학적 기법을 이용한다. 실제 감염 여부와 무관하게 경고를 띄우고 결제를 유도하는 경우가 많다.

  5. 문제 5

    4지선다

    다음 Java 코드의 출력 결과로 가장 적절한 것은?

    Java
    public class Main { public static void main(String[] args) { int a = 5, b = 0; try { System.out.print(a / b); } catch (ArithmeticException e) { System.out.print("출력1"); } catch (ArrayIndexOutOfBoundsException e) { System.out.print("출력2"); } catch (NumberFormatException e) { System.out.print("출력3"); } catch (Exception e) { System.out.print("출력4"); } finally { System.out.print("출력5"); } } }
    • 1.출력1출력5
    • 2.출력2출력5
    • 3.출력4출력5
    • 4.출력5
    정답·해설 보기

    정답

    1. 출력1출력5

    해설

    정답: 1. 5를 0으로 나누면 ArithmeticException이 발생하여 첫 번째 catch가 실행되고, finally 블록도 실행된다.

    오답 풀이

    • 1번: ArithmeticException 처리 후 finally가 실행되므로 정답이다.
    • 2번: 배열 인덱스 예외가 발생하지 않는다.
    • 3번: ArithmeticException이 먼저 매칭되므로 Exception catch까지 가지 않는다.
    • 4번: catch 블록 출력이 누락되었다.

    보충 개념 Java에서 finally 블록은 예외 발생 여부와 관계없이 일반적으로 실행된다. 여러 catch가 있을 때는 위에서부터 타입이 맞는 catch가 실행된다.

  6. 문제 6

    4지선다

    ARP와 RARP에 대한 설명으로 가장 적절한 것은?

    • 1.ARP는 IP 주소를 MAC 주소로 변환하고, RARP는 MAC 주소를 IP 주소로 변환한다.
    • 2.ARP는 MAC 주소를 IP 주소로 변환하고, RARP는 IP 주소를 MAC 주소로 변환한다.
    • 3.ARP와 RARP는 모두 도메인 이름을 IP 주소로 변환한다.
    • 4.ARP와 RARP는 모두 오류 검출 코드를 생성한다.
    정답·해설 보기

    정답

    1. ARP는 IP 주소를 MAC 주소로 변환하고, RARP는 MAC 주소를 IP 주소로 변환한다.

    해설

    정답: 1. ARP는 IP 주소에 대응하는 MAC 주소를 찾고, RARP는 MAC 주소에 대응하는 IP 주소를 찾는다.

    오답 풀이

    • 1번: 두 프로토콜의 역할이 올바르게 연결되었다.
    • 2번: ARP와 RARP의 설명이 반대이다.
    • 3번: 도메인 이름을 IP 주소로 변환하는 것은 DNS이다.
    • 4번: 오류 검출 코드는 CRC와 관련된다.

    보충 개념 ARP는 같은 네트워크 내 통신에서 IP 주소를 기반으로 MAC 주소를 알아내는 데 사용된다. RARP는 과거 디스크 없는 장비가 자신의 IP를 알아낼 때 사용되었다.

  7. 문제 7

    4지선다

    다음 SQL 실행 결과로 가장 적절한 것은?

    <조건> emp 테이블과 sal 테이블을 id 기준으로 조인하고, incentive가 500 이상인 행만 조회한다. 조건을 만족하는 행은 이순신 1건이며 incentive 값은 1000이다.

    SQL
    SELECT name, incentive FROM emp, sal WHERE emp.id = sal.id AND incentive >= 500;
    • 1.이순신 | 1000
    • 2.이순신 | 500
    • 3.강감찬 | 1000
    • 4.결과 없음
    정답·해설 보기

    정답

    1. 이순신 | 1000

    해설

    정답: 1. id가 일치하고 incentive가 500 이상인 행이 이순신 1건이며 값은 1000이다.

    오답 풀이

    • 1번: 조인 조건과 필터 조건을 모두 만족하는 결과이다.
    • 2번: incentive 값을 잘못 제시했다.
    • 3번: 조건을 만족하는 이름이 다르다.
    • 4번: 조건을 만족하는 행이 존재한다.

    보충 개념 구식 조인 문법에서는 FROM 절에 테이블을 나열하고 WHERE 절에 조인 조건과 필터 조건을 함께 작성한다. 컬럼명이 여러 테이블에 동시에 존재할 수 있으면 테이블 별칭을 붙여 명확히 작성하는 것이 좋다.

  8. 문제 8

    4지선다

    다음 데이터베이스 용어와 설명의 연결로 가장 적절한 것은?

    <설명>

    1. 릴레이션에서 속성의 개수
    2. 릴레이션에서 튜플의 개수
    3. 다른 릴레이션의 기본키를 참조하는 속성
    4. 특정 속성에 입력될 수 있는 값의 유형이나 범위

    <보기> ㄱ. domain ㄴ. primary ㄷ. degree ㄹ. candidate ㅁ. cardinality ㅂ. attribute ㅅ. foreign

    • 1.1-ㄷ, 2-ㅁ, 3-ㅅ, 4-ㄱ
    • 2.1-ㅁ, 2-ㄷ, 3-ㅅ, 4-ㄱ
    • 3.1-ㄷ, 2-ㅁ, 3-ㄴ, 4-ㅂ
    • 4.1-ㅂ, 2-ㄹ, 3-ㅅ, 4-ㄱ
    정답·해설 보기

    정답

    1. 1-ㄷ, 2-ㅁ, 3-ㅅ, 4-ㄱ

    해설

    정답: 1. 속성 수는 degree, 튜플 수는 cardinality, 참조 속성은 foreign key, 값의 범위는 domain이다.

    오답 풀이

    • 1번: 모든 연결이 적절하다.
    • 2번: degree와 cardinality가 바뀌었다.
    • 3번: 외래키를 primary로 잘못 연결했다.
    • 4번: degree와 cardinality의 의미가 맞지 않는다.

    보충 개념 릴레이션의 차수(degree)는 속성 수, 카디널리티(cardinality)는 튜플 수이다. 도메인은 속성이 가질 수 있는 값의 범위이다.

  9. 문제 9

    4지선다

    IP 주소가 192.168.35.10, 서브넷 마스크가 255.255.252.0인 PC와 같은 네트워크에 속하는 IP로 가장 적절한 것은?

    <보기> ㄱ. 192.168.34.1 ㄴ. 192.168.32.19 ㄷ. 192.168.35.200 ㄹ. 192.168.33.138 ㅁ. 192.168.35.50

    • 1.ㄱ, ㄴ, ㄷ, ㄹ, ㅁ
    • 2.ㄱ, ㄷ, ㅁ
    • 3.ㄴ, ㄹ
    • 4.ㄷ, ㅁ
    정답·해설 보기

    정답

    1. ㄱ, ㄴ, ㄷ, ㄹ, ㅁ

    해설

    정답: 1. 255.255.252.0은 /22이며, 192.168.35.10은 192.168.32.0~192.168.35.255 범위에 속한다. 제시된 IP는 모두 이 범위에 포함된다.

    오답 풀이

    • 1번: 모든 IP가 같은 /22 네트워크 범위에 포함된다.
    • 2번: ㄴ과 ㄹ도 같은 네트워크에 속한다.
    • 3번: ㄱ, ㄷ, ㅁ도 같은 네트워크에 속한다.
    • 4번: 일부만 포함한 선택지이다.

    보충 개념 /22는 세 번째 옥텟 단위로 4씩 증가하는 네트워크 블록을 만든다. 35가 포함되는 블록은 32~35이다.

  10. 문제 10

    4지선다

    다음 C 코드의 출력 결과로 가장 적절한 것은?

    C
    #include <stdio.h> char Data[5] = {'B', 'A', 'D', 'E'}; char c; int main() { int i, temp, temp2; c = 'C'; printf("%d\n", Data[3] - Data[1]); for (i = 0; i < 5; ++i) { if (Data[i] > c) break; } temp = Data[i]; Data[i] = c; i++; for (; i < 5; ++i) { temp2 = Data[i]; Data[i] = temp; temp = temp2; } for (i = 0; i < 5; i++) { printf("%c", Data[i]); } }
    • 1.4
    • 2.4
    • 3.3
    • 4.4
    정답·해설 보기

    정답

    1. 4

    해설

    정답: 1. 'E' - 'A'는 ASCII 코드 차이로 4이고, 'C'를 첫 번째로 자신보다 큰 문자 D 위치에 삽입하면 배열은 B, A, C, D, E가 된다.

    오답 풀이

    • 1번: 첫 줄 4와 최종 문자열 BACDE가 맞다.
    • 2번: 삽입 후 뒤 원소 이동이 잘못 계산되었다.
    • 3번: ASCII 코드 차이를 잘못 계산했다.
    • 4번: 기존 배열 순서를 완전 정렬한 것이 아니다.

    보충 개념 문자끼리 뺄셈하면 해당 문자의 정수 코드값 차이가 계산된다. C의 전역 char 배열은 명시하지 않은 마지막 원소가 '\0'으로 초기화된다.

  11. 문제 11

    4지선다

    다음 C 코드의 출력 결과로 가장 적절한 것은?

    C
    #include <stdio.h> #include <stdlib.h> void set(int** arr, int* data, int rows, int cols) { for (int i = 0; i < rows * cols; ++i) { arr[((i + 1) / rows) % rows][(i + 1) % cols] = data[i]; } } int main() { int rows = 3, cols = 3, sum = 0; int data[] = {5, 2, 7, 4, 1, 8, 3, 6, 9}; int** arr = (int**)malloc(sizeof(int*) * rows); for (int i = 0; i < cols; i++) { arr[i] = (int*)malloc(sizeof(int) * cols); } set(arr, data, rows, cols); for (int i = 0; i < rows * cols; i++) { sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1); } for (int i = 0; i < rows; i++) { free(arr[i]); } free(arr); printf("%d", sum); }
    • 1.13
    • 2.12
    • 3.9
    • 4.15
    정답·해설 보기

    정답

    1. 13

    해설

    정답: 1. set 함수 수행 후 배열은 [9,5,2], [7,4,1], [8,3,6] 형태가 된다. 이후 짝수 인덱스는 더하고 홀수 인덱스는 빼면 9-5+2-7+4-1+8-3+6 = 13이다.

    오답 풀이

    • 1번: 배열 배치와 부호 계산을 올바르게 추적한 결과이다.
    • 2번: 일부 원소의 부호를 잘못 적용한 값이다.
    • 3번: 배열 배치 순서를 단순 행 우선으로 착각한 값이다.
    • 4번: 특정 원소를 누락하거나 중복 계산한 값이다.

    보충 개념 포인터 배열로 만든 2차원 배열은 인덱스 계산을 정확히 추적해야 한다. %/ 연산이 행과 열 계산에 어떻게 사용되는지 확인해야 한다.

  12. 문제 12

    4지선다

    다음 결합도 설명과 용어의 연결로 가장 적절한 것은?

    <설명>

    1. 다른 모듈 내부의 변수나 기능을 직접 사용하는 경우
    2. 모듈 간 인터페이스로 배열, 객체, 자료구조 등이 전달되는 경우
    3. 파라미터가 아닌 모듈 밖 전역 변수를 참조하거나 갱신하는 경우

    <보기> ㄱ. 자료 결합도 ㄴ. 스탬프 결합도 ㄷ. 제어 결합도 ㄹ. 공통 결합도 ㅁ. 내용 결합도 ㅂ. 외부 결합도

    • 1.1-ㅁ, 2-ㄴ, 3-ㄹ
    • 2.1-ㄱ, 2-ㄴ, 3-ㄷ
    • 3.1-ㄹ, 2-ㅁ, 3-ㄴ
    • 4.1-ㅂ, 2-ㄱ, 3-ㄹ
    정답·해설 보기

    정답

    1. 1-ㅁ, 2-ㄴ, 3-ㄹ

    해설

    정답: 1. 모듈 내부를 직접 참조하면 내용 결합도, 자료구조 전달은 스탬프 결합도, 전역 변수 공유는 공통 결합도이다.

    오답 풀이

    • 1번: 세 설명과 결합도 유형이 모두 올바르게 연결되었다.
    • 2번: 내부 직접 참조를 자료 결합도로 잘못 연결했다.
    • 3번: 세 연결이 모두 부적절하다.
    • 4번: 자료구조 전달은 자료 결합도가 아니라 스탬프 결합도이다.

    보충 개념 결합도는 모듈 간 의존 정도를 의미한다. 일반적으로 내용 결합도가 가장 강하고, 자료 결합도가 가장 약한 결합도에 속한다.

  13. 문제 13

    4지선다

    다음 Java 코드의 출력 결과로 가장 적절한 것은?

    Java
    public class Main { public static void main(String[] args) { new Child(); System.out.println(Parent.total); } } class Parent { static int total = 0; int v = 1; public Parent() { total += (++v); show(); } public void show() { total += total; } } class Child extends Parent { int v = 10; public Child() { v += 2; total += v++; show(); } @Override public void show() { total += total * 2; } }
    • 1.54
    • 2.18
    • 3.36
    • 4.72
    정답·해설 보기

    정답

    1. 54

    해설

    정답: 1. Parent 생성자에서 Parent의 v가 1에서 2가 되어 total은 2가 된다. 생성자 안의 show()는 동적 바인딩으로 Child의 show()가 호출되어 total은 6이 된다. 이후 Child 필드 v가 10으로 초기화되고 Child 생성자에서 v += 2로 12가 된 뒤 total에 12를 더해 18이 된다. 마지막 show()로 total은 54가 된다.

    오답 풀이

    • 1번: 생성자 호출 순서와 오버라이딩 메서드 호출을 올바르게 반영했다.
    • 2번: 마지막 show 호출을 누락한 값이다.
    • 3번: show의 계산식을 잘못 적용한 값이다.
    • 4번: total 누적 과정을 과대 계산한 값이다.

    보충 개념 Java 생성자 실행 중에도 오버라이딩된 메서드는 동적 바인딩으로 자식 클래스 메서드가 호출될 수 있다. 이 경우 필드 초기화 순서에 주의해야 한다.

  14. 문제 14

    4지선다

    다음 설명에 해당하는 디자인 패턴으로 가장 적절한 것은?

    <설명> 서로 다른 인터페이스를 가진 클래스들을 함께 사용할 수 있도록 변환한다. 기존 클래스 객체를 감싸 원하는 인터페이스에 맞게 연결해 주는 역할을 한다.

    • 1.Adapter
    • 2.Singleton
    • 3.Observer
    • 4.Factory Method
    정답·해설 보기

    정답

    1. Adapter

    해설

    정답: 1. Adapter 패턴은 호환되지 않는 인터페이스를 가진 객체들을 함께 사용할 수 있도록 중간에서 변환해 준다.

    오답 풀이

    • 1번: 인터페이스 변환 역할을 하므로 정답이다.
    • 2번: Singleton은 인스턴스를 하나만 생성하도록 보장하는 패턴이다.
    • 3번: Observer는 상태 변화 알림을 구독자에게 전달하는 패턴이다.
    • 4번: Factory Method는 객체 생성 책임을 하위 클래스에 위임하는 패턴이다.

    보충 개념 Adapter 패턴의 주요 구성 요소는 Target, Adapter, Adaptee, Client이다. 기존 코드를 수정하지 않고 인터페이스를 맞출 때 유용하다.

  15. 문제 15

    4지선다

    다음 코드에 대해 문장 커버리지 테스트를 수행하려고 한다. 문장 번호와 실행 순서로 가장 적절한 것은?

    C
    int main(int b[], int m, int x) { int a = 0; // ① while (a < m && b[a] < x) { // ② if (b[a] < 0) // ③ b[a] = -b[a]; // ④ a++; // ⑤ } return 1; // ⑥ }

    <조건> 문장 ④가 한 번 실행되고, 그 다음 while 조건이 거짓이 되어 반복문을 종료하는 테스트 경로를 기준으로 한다.

    • 1.①→②→③→④→⑤→②→⑥
    • 2.①→②→③→⑤→②→⑥
    • 3.①→②→⑥
    • 4.②→③→④→⑤→①→⑥
    정답·해설 보기

    정답

    1. ①→②→③→④→⑤→②→⑥

    해설

    정답: 1. 초기화 문장 ①을 수행한 뒤 while 조건 ②가 참이 되어 반복문에 진입한다. if 조건 ③이 참이면 문장 ④가 실행되고, 이후 증가 문장 ⑤가 실행된다. 다음 while 조건 ②가 거짓이 되면 반복문을 빠져나와 return 문장 ⑥을 실행한다.

    오답 풀이

    • 1번: 조건에서 제시한 테스트 경로의 실행 순서와 일치한다.
    • 2번: 문장 ④가 실행되는 경로가 아니다.
    • 3번: 반복문 내부 문장이 실행되지 않는 경로이다.
    • 4번: 초기화 문장 ①이 조건 검사보다 먼저 실행되어야 하므로 순서가 틀렸다.

    보충 개념 문장 커버리지는 프로그램의 모든 문장이 최소 한 번 이상 실행되도록 테스트 경로를 선정하는 기준이다. 실행 순서를 묻는 문항은 입력 조건 또는 테스트 경로가 명확히 제시되어야 한다.

  16. 문제 16

    4지선다

    다음 Java 코드의 출력 결과로 가장 적절한 것은?

    Java
    public class Main { public static void main(String[] args) { int[] data = {3, 5, 8, 12, 17}; System.out.println(func(data, 0, data.length - 1)); } static int func(int[] a, int st, int end) { if (st >= end) return 0; int mid = (st + end) / 2; return a[mid] + Math.max(func(a, st, mid), func(a, mid + 1, end)); } }
    • 1.20
    • 2.17
    • 3.25
    • 4.8
    정답·해설 보기

    정답

    1. 20

    해설

    정답: 1. 최초 호출 func(a,0,4)에서 mid는 2이므로 a[2]=8을 더한다. 왼쪽 func(a,0,2)는 8, 오른쪽 func(a,3,4)는 12를 반환하므로 8 + max(8, 12) = 20이다.

    오답 풀이

    • 1번: 재귀 호출과 Math.max 결과를 올바르게 계산한 값이다.
    • 2번: 배열의 마지막 값과 혼동한 값이다.
    • 3번: 여러 값을 단순 합산한 값이다.
    • 4번: 최초 mid 값만 반환한 경우이다.

    보충 개념 재귀 함수는 종료 조건과 분할 범위를 정확히 추적해야 한다. 이 코드는 중간값을 더하고 양쪽 재귀 결과 중 큰 값을 선택한다.

  17. 문제 17

    4지선다

    다음 Python 코드의 출력 결과로 가장 적절한 것은?

    Python
    class Node: def __init__(self, value): self.value = value self.children = [] def tree(li): nodes = [Node(i) for i in li] for i in range(1, len(li)): nodes[(i - 1) // 2].children.append(nodes[i]) return nodes[0] def calc(node, level=0): if node is None: return 0 return (node.value if level % 2 == 1 else 0) + sum(calc(n, level + 1) for n in node.children) li = [3, 5, 8, 12, 15, 18, 21] root = tree(li) print(calc(root))
    • 1.13
    • 2.3
    • 3.33
    • 4.26
    정답·해설 보기

    정답

    1. 13

    해설

    정답: 1. calc는 홀수 레벨의 노드 값만 더한다. 루트 3은 레벨 0이라 제외되고, 레벨 1의 값 5와 8이 더해져 13이 출력된다.

    오답 풀이

    • 1번: 홀수 레벨 값 5와 8의 합이다.
    • 2번: 루트 값만 계산한 값이다.
    • 3번: 일부 자식 노드까지 잘못 포함한 값이다.
    • 4번: 짝수 레벨 또는 전체 합 일부를 혼동한 값이다.

    보충 개념 완전 이진트리 배열 표현에서 인덱스 i의 부모는 (i-1)//2이다. 재귀 함수의 level 값이 어떤 노드를 포함할지 결정한다.

  18. 문제 18

    4지선다

    다음 C 코드의 출력 결과로 가장 적절한 것은?

    C
    #include <stdio.h> #include <stdlib.h> typedef struct Data { int value; struct Data *next; } Data; Data* insert(Data* head, int value) { Data* new_node = (Data*)malloc(sizeof(Data)); new_node->value = value; new_node->next = head; return new_node; } Data* reconnect(Data* head, int value) { if (head == NULL || head->value == value) return head; Data *prev = NULL, *curr = head; while (curr != NULL && curr->value != value) { prev = curr; curr = curr->next; } if (curr != NULL && prev != NULL) { prev->next = curr->next; curr->next = head; head = curr; } return head; } int main() { Data *head = NULL, *curr; for (int i = 1; i <= 5; i++) head = insert(head, i); head = reconnect(head, 3); for (curr = head; curr != NULL; curr = curr->next) printf("%d", curr->value); return 0; }
    • 1.35421
    • 2.12345
    • 3.54321
    • 4.34521
    정답·해설 보기

    정답

    1. 35421

    해설

    정답: 1. insert는 새 노드를 head 앞에 붙이므로 최초 리스트는 5→4→3→2→1이다. reconnect(head, 3)은 값 3 노드를 맨 앞으로 옮기므로 3→5→4→2→1이 된다.

    오답 풀이

    • 1번: 연결 리스트 삽입 순서와 재연결 결과가 맞다.
    • 2번: 뒤에 삽입되는 방식으로 착각한 값이다.
    • 3번: reconnect 수행 전 리스트이다.
    • 4번: 4와 5의 순서를 잘못 계산한 값이다.

    보충 개념 단일 연결 리스트에서 노드를 앞으로 이동하려면 이전 노드의 next를 현재 노드 다음으로 바꾸고, 현재 노드의 next를 기존 head로 연결해야 한다.

  19. 문제 19

    4지선다

    다음 C 코드의 출력 결과로 가장 적절한 것은?

    C
    #include <stdio.h> typedef struct student { char* name; int score[3]; } Student; int dec(int enc) { return enc & 0xA5; } int sum(Student* p) { return dec(p->score[0]) + dec(p->score[1]) + dec(p->score[2]); } int main() { Student s[2] = { "Kim", {0xA0, 0xA5, 0xDB}, "Lee", {0xA0, 0xED, 0x81} }; int result = 0; for (int i = 0; i < 2; i++) { result += sum(&s[i]); } printf("%d", result); return 0; }
    • 1.908
    • 2.806
    • 3.512
    • 4.1024
    정답·해설 보기

    정답

    1. 908

    해설

    정답: 1. 각 점수에 대해 비트 AND 연산 enc & 0xA5를 수행하면 160, 165, 129, 160, 165, 129가 된다. 이를 모두 합산하면 908이다.

    오답 풀이

    • 1번: 비트 AND 결과를 모두 합산한 값이다.
    • 2번: 일부 16진수 값을 10진수로 잘못 변환한 값이다.
    • 3번: AND 연산 대신 일부 값만 더한 경우이다.
    • 4번: 16진수 자리수를 단순 합산한 값과 혼동한 것이다.

    보충 개념 C에서 &는 비트 단위 AND 연산자이다. 16진수 값을 2진수로 변환해 같은 자리의 비트가 모두 1인 경우만 1로 남는다.

  20. 문제 20

    4지선다

    다음 Java 코드의 출력 결과로 가장 적절한 것은?

    Java
    public class Main { public static void main(String[] args) { System.out.println(calc("5")); } static int calc(int value) { if (value <= 1) return value; return calc(value - 1) + calc(value - 2); } static int calc(String str) { int value = Integer.valueOf(str); if (value <= 1) return value; return calc(value - 1) + calc(value - 3); } }
    • 1.4
    • 2.5
    • 3.7
    • 4.8
    정답·해설 보기

    정답

    1. 4

    해설

    정답: 1. main에서는 문자열 인자를 전달하므로 calc(String)이 먼저 호출된다. calc("5")는 calc(4) + calc(2)를 계산하고, int 버전의 재귀 결과는 각각 3과 1이므로 합은 4이다.

    오답 풀이

    • 1번: 오버로딩 선택과 재귀 계산을 올바르게 반영했다.
    • 2번: 일반 피보나치 F(5)와 혼동한 값이다.
    • 3번: calc(5) int 버전 결과와 혼동한 값이다.
    • 4번: 재귀 호출 범위를 과대 계산한 값이다.

    보충 개념 Java 오버로딩은 컴파일 시점의 인자 타입에 따라 호출 메서드가 결정된다. 문자열 "5"는 calc(String)을 호출하고, 그 내부의 정수 연산 결과는 calc(int)를 호출한다.

이번엔 직접 풀어보세요

타이머와 자동 채점이 켜진 실제 시험 환경으로 응시할 수 있습니다.