[정보처리기사 실기] 2025년 2회 기출문제 풀이

2025. 10. 24. 04:11·자격증/정보처리기사
728x90

정처기 2025년 2회 실기 기출 풀이과정을 정리해보았습니다. 2025년 2회 실기 합격률은 27.8%였습니다. 

 

1. 다음은 파일 구조와 관련된 설명이다. 설명을 읽고 괄호 안에 들어갈 가장 알맞은 용어를 작성하시오.

데이터베이스의 물리 설계 시, 레코드에 접근하는 방법은 순차 접근 방법, [   ] 방법, 해싱 방법 등이 있다.
이 중 [   ] 방법은 레코드의 키 값과 포인터를 쌍으로 묶어 저장하며 검색 시 키 값을 기준으로 빠르게 탐색할 수 있도록 설계되어 있다.
이 방식은 검색 속도가 빠르며 <키 값, 포인터> 쌍으로 구성된 자료 구조를 사용하여 해당 키가 가리키는 주소를 통해 원하는 레코드를 직접 찾을 수 있다.
더보기

정답: 인덱스(또는 색인) 

 

파일구조 수(순)색해! - 순차 접근 , 색인 접근, 해싱 접근

 

2. 다음은 데이터베이스 릴레이션의 구성 요소 중 하나에 대한 설명이다. 설명을 읽고 보기에서 알맞은 기호를 골라 작성하시오.

릴레이션(Relation)에서 열(Column)을 의미하며 데이터 항목의 속성(Attribute) 또는 특성을 나타낸다.
 각 열은 고유한 이름을 가지며 특정 도메인(Domain)에서 정의된 값을 갖는다.
 예를 들어 "학생" 릴레이션에서 학번, 이름, 전공 등은 각각 하나의 열이며 이 열들은 학생의 고유한 속성을 나타낸다.
 이 개념은 파일 구조에서의 필드(Field)에 해당하며 릴레이션에서 행(Row, Tuple)의 구성 요소가 된다.
[보기]
 
ㄱ. Cardinality
ㄴ. Domain
ㄷ. Attribute
ㅁ. Degree
ㅂ. Schema
ㅅ. Tuple
더보기

정답: ㄷ. Attribute

관계형DB 관련용어 매칭하는 문제 

 

* 속디차: 속성(열) = 디그리 = 차수 

* 행튜카: 튜플(행) = 카디널리티

출처:꿈꾸는라이언

 

3. 다음은 정보보안 관련 문제이다. 아래 내용을 보고 알맞는 단어를 작성하시오. 

원격 접속과 관련된 보안 프로토콜이며 암호화된 통신을 제공하는 보안 접속용 프로토콜이다.
공개키 기반의 인증 방식을 사용하며 암호화된 데이터 전송을 지원한다.
주로 원격 서버에 안전하게 접속할 때 사용되며 기본 포트 번호는 22번이다.
Telnet의 보안 취약점을 보완한 대안으로 널리 사용된다.
더보기

정답: SSH

 

22번 포트

출처:꿈꾸는라이언

 

4. 스케줄링 알고리즘에 관한 다음 설명을 읽고 (1)과 (2)에 알맞은 스케줄링 알고리즘의 명칭을 각각 쓰시오.

(1) CPU burst 시간이 짧은 프로세스를 우선적으로 처리하는 스케줄링 방식이다. "Shortest Next CPU Burst"라고도 불리며 선점형 또는 비선점형으로 구현될 수 있다.
(2) 위의 스케줄링 방식을 선점형으로 구현한 형태로 실행 중인 프로세스보다 더 짧은 burst 시간을 가진 프로세스가 도착하면 현재 CPU를 선점한다.
더보기

(1) SJF (Shortest Job First)

(2) SRT (Shortest Remaining Time)

 

짧은 시간

선점: SRT  SRT(기차)자리 선점해

비전점:SJF

 

출처:꿈꾸는라이언

 

5. 다음은 Java의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

public class Main {
    public static void change(String[] data, String s){
        data[0] = s;
        s = "Z";
    }
    
    public static void main(String[] args) {
        String data[] = { "A" };
        String s = "B";
        
        change(data, s);
        System.out.print(data[0] + s);
    }
}
더보기

정답: BB

 

기본형 타입 (Primitive Type)

논리형 (boolean),  문자형 (char),  정수형 (byte, short, int, long)  실수형 (float, double)

참조형 타입 (Reference Type)

클래스, 배열, 열거 타입

 

참고) Call by Value와 Call by Reference 있는데 사실 자바(Java) 프로그래밍 언어에서는 call by reference 라는 것은 존재하지 않는다. 왜냐하면 C 와 달리 자바에서는 포인터를 철저하게 숨겨 개발자가 직접 메모리 주소에 접근 하지 못하게 조치했기 때문이다.

 

6. 다음은 IP 주소와 서브넷 마스크에 관한 문제이다. 주어진 정보를 참고하여 괄호 안에 들어갈 알맞은 값을 쓰시오.

호스트의 IP 주소가 223.13.234.132이고 서브넷 마스크가 255.255.255.192일 때 다음 물음에 답하시오.
 이 호스트가 속한 네트워크 주소는 223.13.234.( ① )이다.
 이 네트워크에서 사용 가능한 호스트 수는 ( ② )개이다.
(단, 네트워크 주소와 브로드캐스트 주소는 제외한다.)
더보기

정답: ① 128 ② 62

 

255.255.255.192

 

IP: 223.13.234.132→ 223.13.234. 10000100

서브넷: 255.255.255.192 → 255.255.255. 11000000

255.255.255. 10000000(128) AND 

 

255는 11111111이기 때문에 네 번째 옥텟부터 보면 된다.

호스트 수: 2^6 = 64, 255.255.255.192에서 192는 11000000=0이 6개

네트워크 주소는: 223.13.234.128

브로드캐스트 주소는: 223.13.234.191 은  빼준다.

64 - 2 = 62

 

7. 다음은 디자인 패턴에 관한 문제이다. 아래 내용을 보고 알맞는 단어를 작성하시오. 

어떤 객체에 대한 접근을 제어하거나 추가적인 기능을 부여하기 위해 해당 객체의 대리 객체를 사용하는 방식의 디자인 패턴이다.
실제 객체에 대한 접근 전에 필요한 작업을 수행할 수 있으며 실제 객체의 생성을 지연시켜 메모리와 자원을 절약할 수 있다.
또한, 실제 객체를 감추어 정보은닉을 강화할 수 있다는 장점이 있다.
더보기

정답: Proxy

Proxy (대리 객체 수행)

 

8. 다음은 웹 데이터 교환 방식에 관한 문제이다. 아래 설명을 읽고 괄호 안에 들어갈 알맞은 용어를 작성하시오.

(   )은/는 웹 페이지 전체를 다시 불러오지 않고 JavaScript와 XML(또는 JSON)을 이용하여 일부 콘텐츠만 비동기적으로 갱신할 수 있는 기술이다.
(   )은/는 HTML만으로는 구현하기 어려운 동적인 기능들을 가능하게 하여 사용자가 웹 페이지와 보다 자유롭게 상호작용할 수 있도록 해주는 웹 개발 기법이다.
더보기

정답: AJAX

 

XML + 언어 = WSDL

XML + 프로토콜 = SOAP

XML + JAVA = AJAX

XML + 검색 = UDDI

XML + 대체 = JSON

 

9. 다음은 Java언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

public class Main {
 
    static interface F {
        int apply(int x) throws Exception;
    }
 
    public static int run(F f) {
        try {
            return f.apply(3);
        } catch (Exception e) {
            return 7;
        }
    }
 
    public static void main(String[] args) {
 
        F f = (x) -> {
            if (x > 2) {
                throw new Exception();
            }
            return x * 2;
        };
 
        System.out.print(run(f) + run((int n) -> n + 9));
    }
 
}
더보기

정답: 19

 

run(f)       = 7
run((n)->n+9) = 3+9 = 12
총합: 7 + 12 = 19

 

10. 다음은 Java언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

public class Main{
 
    public static class Parent {
 
        public int x(int i) { return i + 2; }
        public static String id() { return "P";}
        
    }
 
    public static class Child extends Parent {
        
        public int x(int i) { return i + 3; }
        public String x(String s) { return s + "R"; }
        public static String id() { return "C"; }
        
    }
 
    public static void main(String[] args) {
 
        Parent ref = new Child();
        System.out.println(ref.x(2) + ref.id());
        
    }
    
}
더보기

정답: 5P

Overriding 메소드 이름, 매개변수, 반환타입 같다
Child.x(int)
Overloading 메소드의 이름이 같고,
매개변수의 개수나 타입이 달라야 한다
Child.x(String s)
Hiding   Child.id()

int x(int i)는 오버라이딩이라 자식꺼 사용

static이 붙으면 Hiding이라 부모꺼 사용 (static 메소드는 오버라이딩이 불가능하다.)

 

11. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.

더보기

정답: 1234561, 124567  or 1234567, 124561

 

테스트 커버리지

구 구문 커버리지(Statement Coverage) 코드 한 줄이 한번 이상 실행
조 조건 커버리지(Condition Coverage) 내부 조건 true/false
결 결정 커버리지(Decision Coverage) 모든 조건식 true/false
조 조건/결정 커버리지(Condition/Decision Coverage) 조건 커버리지를 개선
변 변형 조건/결정 커버리지(Modified Condition/Decision Coverage)  
다 다중 조건 커버리지(Multiple Condition Coverage)  
출처:꿈꾸는라이언

 

12. 다음은 C언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

#include <stdio.h>
#define SIZE 3
 
typedef struct {
    int a[SIZE];
    int front;
    int rear;
} Queue;
 
void enq(Queue* q, int val){
    q->a[q->rear] = val; 
    q->rear = (q->rear + 1) % SIZE;
}
 
int deq(Queue* q) {
    int val = q->a[q->front];
    q->front = (q->front + 1) % SIZE;
    return val;
}
 
int main() {
    Queue q = {{0}, 0, 0};
 
    enq(&q,1); enq(&q,2); deq(&q); enq(&q, 3);
    
    int first = deq(&q);
    int second = deq(&q);
    printf("%d 그리고 %d", first, second);
    
    return 0;
}
더보기

정답: 2 그리고 3

  • front: 꺼낼 위치
  • rear: 넣을 위치

1. enq(1) → [1, _, _] front=0, rear=1 

2. enq(2) → [1, 2, _] front=0, rear=2 

3. deq() → [1, 2, _] front=1, rear=2 (1 꺼냄) 

4. enq(3) → [1, 2, 3] front=1, rear=0 (rear가 처음으로) 

5. deq() → 2 꺼냄 front=2 

6. deq() → 3 꺼냄 front=0

 

13. 라운드로빈(RR) 방식을 이용하고 아래 내용을 참고하여 평균대기시간을 구하시오. 

운영체제에서 라운드로빈(Round Robin, RR) 스케줄링은 각 프로세스에 동일한 시간 할당량(타임 퀀텀)을 순차적으로 부여하며 CPU를 할당하는 방식이다.
 
다음은 4개의 프로세스가 서로 다른 시간에 도착하며 각기 다른 실행 시간을 가지는 상황이다. 이때 시간 할당량은 4ms이고 컨텍스트 스위칭 시간은 무시한다고 가정한다.
 
아래 정보를 바탕으로 라운드로빈(RR) 방식으로 CPU 스케줄링을 수행할 경우 모든 프로세스의 평균 대기시간(Average Waiting Time)은 얼마인가?
프로세스 도착 시간(ms) 실행 시간(ms)
P1 0 8
P2 1 4
P3 2 9
P4 3 5
더보기

정답: 11.75ms

Round Robin  우선순위 없이 시간 단위로 CPU 할당 (공평한 자원 분배)

타임 퀀텀 = 4ms씩 순환

시간 구간 실행 프로세스 남은 실행 시간 Ready Queue
0-4 P1 P1: 4ms P2(1), P3(2), P4(3)
4-8 P2 P2: 0ms ✓ P3, P4, P1
8-12 P3 P3: 5ms P4, P1
12-16 P4 P4: 1ms P1, P3
16-20 P1 P1: 0ms ✓ P3, P4
20-24 P3 P3: 1ms P4
24-25 P4 P4: 0ms ✓ P3
25-26 P3 P3: 0ms ✓ -

 

대기 시간 = 완료 시간 - 도착 시간 - 실행 시간

프로세스 도착 시간 실행 시간 완료 시간 대기 시간 계산 대기 시간
P1 0ms 8ms 20ms 20 - 0 - 8 12ms
P2 1ms 4ms 8ms 8 - 1 - 4 3ms
P3 2ms 9ms 26ms 26 - 2 - 9 15ms
P4 3ms 5ms 25ms 25 - 3 - 5 17ms

평균 대기 시간

(12 + 3 + 15 + 17) ÷ 4 = 47 ÷ 4 = 11.75ms

 

14. 다음은 C언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

#include <stdio.h>
 
struct dat {
    int x;
    int y;
};
 
int main() {
    struct dat a[] = {{1, 2}, {3, 4}, {5, 6}};
    struct dat* ptr = a;
    struct dat** pptr = &ptr;
 
    (*pptr)[1] = (*pptr)[2];
    printf("%d 그리고 %d", a[1].x, a[1].y);
 
    return 0;
}
더보기

정답: 5 그리고 6


초기 상태

[100번지] a[0] → x:1, y:2  [108번지] a[1] → x:3, y:4  [116번지] a[2] → x:5, y:6
[200번지] ptr  → 100 (a의 주소)    
[300번지] pptr → 200 (ptr의 주소    

(*pptr)[1] = (*pptr)[2]  실행
*pptr = ptr = 100번지
(*pptr)[1] = 108번지 = a[1] = 배열 a에서 1번째 요소
(*pptr)[2] = 116번지 = a[2]

→ a[1] = a[2] 복사


실행 후

[100번지] a[0] → x:1, y:2 [108번지] a[1] → x:5, y:6  ✓ 변경됨!  [116번지] a[2] → x:5, y:6
[200번지] ptr  → 100 (a의 주소)    
[300번지] pptr → 200 (ptr의 주소    

출력: 5 그리고 6

 

15. 다음은 Java언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

public class Main{
    public static class BO {
        public int v;
        public BO(int v) {
            this.v = v;
        }
    }
    public static void main(String[] args) {
        BO a = new BO(1);
        BO b = new BO(2);
        BO c = new BO(3);
        BO[] arr = {a, b, c};
        BO t = arr[0];
        arr[0] = arr[2];
        arr[2] = t;
        arr[1].v = arr[0].v;
        System.out.println(a.v + "a" + b.v + "b" + c.v);
    }
}
더보기

정답: 1a3b3

public class Main{
    public static class BO {
        public int v;
        public BO(int v) {
            this.v = v;
        }
    }
    public static void main(String[] args) {
        BO a = new BO(1);  // a.v = 1
        BO b = new BO(2); // b.v = 2
        BO c = new BO(3); // c.v = 3
        
        BO[] arr = {a, b, c}; // arr[0]=a, arr[1]=b, arr[2]=c
        
        BO t = arr[0]; // t = a
        arr[0] = arr[2]; // arr[0] = c
        arr[2] = t; // arr[2] = a
        
        arr[1].v = arr[0].v; //b.v = c.v(3)
        System.out.println(a.v + "a" + b.v + "b" + c.v);
    }
}

 

println는 줄바꿈O

print 줄바꿈X

 

16. 다음은 C언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

#include <stdio.h>
#include <stdlib.h>
 
struct node {
    int p;
    struct node* n;
};
 
int main() {
    struct node a = {1, NULL};
    struct node b = {2, NULL};
    struct node c = {3, NULL};
 
    a.n = &b; b.n = &c; c.n = NULL;
    c.n = &a; a.n = &b; b.n = NULL;
    struct node* head = &c;
    printf("%d %d %d", head->p, head->n->p, head->n->n->p);
    return 0;
}
더보기

정답: 3 1 2

 

1. 노드 생성

struct node a = {1, NULL};
struct node b = {2, NULL};
struct node c = {3, NULL};
세 개의 독립적인 노드가 생성됨

2. 첫 번째 연결

a.n = &b; b.n = &c; c.n = NULL;
a → b → c → NULL

3.재연결(덮어쓰기)

c.n = &a; a.n = &b; b.n = NULL;

기존 포인터 값들이 새로운 값으로 덮어써집니다!

c → a → b → NULL
 

4.리스트 출력

struct node* head = &c;
printf("%d %d %d", head->p, head->n->p, head->n->n->p);

 

 

17. 다음은 Pyhon언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

lst = [1,2,3]
dst = {i : i*2 for i in lst}
s = set(dst.values())
lst[0] = 99 
dst[2]=7
s.add(99)
print(len(s & set(dst.values())))
더보기

정답: 2

lst = [1,2,3] #리스트
dst = {i : i*2 for i in lst} #딕셔너리: Key(i)와 Value(i*2) 쌍 저장 → {1:2, 2:4, 3:6}
s = set(dst.values()) #딕셔너리 값만 모아서 set → {2,4,6}
lst[0] = 99 #[99,2,3]
dst[2]=7 #{1:2, 2:7, 3:6}
s.add(99) #{2,4,6,99}
print(len(s & set(dst.values()))) #{2,4,6,99} & {2,7,6} 교집합 구함 → {2,6} → 길이 2

 

리스트, 딕셔너리, 셋 차이

list 순서O, 중복O
dictionary key는 중복X, value는 중복O
set 순서X, 중복X

 

리스트와 튜플 차이

list 순서O, 중복O, 수정 가능(mutable)
tuple 순서O, 중복O, 수정 불가(immutable)

 

18. 다음은 C언어의 문제이다. 아래 코드를 보고 알맞는 출력값을 작성하시오. 

#include <stdio.h>
#include <stdlib.h>
 
struct node {
    char c;
    struct node* p;
};
 
struct node* func(char* s) {
    struct node* h = NULL, *n;
    
    while(*s) {
        n = malloc(sizeof(struct node));
        n->c = *s++;
        n->p = h;
        h = n;
    }
    
    return h;
}
 
int main() {
    struct node* n = func("BEST");
    
    while(n) {
        putchar(n->c);
        struct node* t = n;
        n = n->p;
        free(t);
    }
    
    return 0;
}
더보기

정답: TSEB

 

뒤집힌 연결 리스트

BEST

TSEB (뒤집힘)

struct node* func(char* s) {
    struct node* h = NULL, *n;// h: head, n: 새 노드
    

1회차 기준으로 설명
    while(*s) {// 문자열 끝('\0')까지 반복
        n = malloc(sizeof(struct node));//새 노드 동적 할당
        n->c = *s++;//*s++ 후의 증가 예) n->c에 B하고 s는 다음 문자 E로 이동
        n->p = h; //노드 n의 다음 노드를 현재 head(h)로 연결, [B] → NULL// h는 NULL
        h = n;// head(h)를 n으로 바꾼다 h → [B] → NULL
    }
    
    return h; //head 반환
}

 

초기 상태

h = NULL

 

1회차: 문자 'B' 처리

n->c = 'B'
n->p = h // h는 NULL
h = n 
h → [B] → NULL

 

2회차: 문자 'E'처리

n->c = 'E'
n->p = h // h는 [B]
h = n
h → [E] → [B] → NULL

 

3회차: 문자 'S' 처리

n->c = 'S'
n->p = h // h는 [E]
h = n
h → [S] → [E] → [B] → NULL

 

4회차: 문자 'T' 처리

n->c = 'T'
n->p = h // h는 [S]
h = n
 h →  [T] → [S] → [E] → [B] → NULL

 

순회하며 문자열 출력

while(n) {
        putchar(n->c);//char  c 문자 출력
        struct node* t = n;
        n = n->p;//struct node* p 다음 노드 이동
        free(t);

}

 

getchar() putchar()
문자 입력 함수  문자 출력 함수 
입력에서 한 문자를 읽어옵니다. 출력으로 한 문자를 출력합니다.

 

 

19. 다음은 TCP 통신 과정에서 발생할 수 있는 보안 취약점에 대한 설명이다. 이를 이용한 공격 기법으로 옳은 것은?

TCP는 연결을 수립하기 위해 클라이언트가 서버에 SYN 패킷을 보내고 서버는 SYN-ACK 패킷으로 응답한 후 클라이언트가 다시 ACK 패킷을 보내는 3-way-handshake 과정을 거친다.
 
이때 공격자는 클라이언트 역할로 수많은 SYN 패킷을 서버에 전송한 뒤 마지막 ACK를 고의로 보내지 않아 서버가 연결 대기 상태를 계속 유지하게 만든다.
 
이로 인해 서버의 연결 대기 큐가 가득 차면서 정상적인 접속 요청을 처리하지 못하게 되어 서비스 거부 상태가 발생한다.
더보기

정답: SYN Flooding

Ping Flooding 과도한 ICMP 메시지에 의한 응답 과다로 시스템 에러 유발
SYN Flooding SYN 패킷 신호만 전송하여 각 서버의 가용 사용자 수를 선전 후 다른 사용자의 서버 접근을 차단
UDP Flooding 다량의 UDP 패킷을 전송하여 네트워크 자원을 고갈

 

20. 다음 테이블에서 πTTL(employee)에 대한 연산 결과 값을 작성하시오.

[employee테이블]

더보기

1. TTL

2. 부장

3. 대리

4. 과장

5. 차장

 

π 중복제거

출처: 꿈꾸는라이언
728x90
반응형

'자격증 > 정보처리기사' 카테고리의 다른 글

[정보처리기사 실기] 2025년 3회 기출문제 풀이  (0) 2025.11.17
25년 2회 정보처리기사 합격후기(전공생이 깨달은 88점 공부법)  (0) 2025.09.13
[정보처리기사 실기] 2025년 1회 기출문제 풀이  (0) 2025.04.20
[정보처리기사 실기] 2024년 3회 기출문제 풀이  (0) 2025.03.18
[정보처리기사 실기] 2024년 2회 기출문제 풀이  (0) 2025.03.18
'자격증/정보처리기사' 카테고리의 다른 글
  • [정보처리기사 실기] 2025년 3회 기출문제 풀이
  • 25년 2회 정보처리기사 합격후기(전공생이 깨달은 88점 공부법)
  • [정보처리기사 실기] 2025년 1회 기출문제 풀이
  • [정보처리기사 실기] 2024년 3회 기출문제 풀이
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • cs (82)
        • dev (28)
        • sec (29)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 알고리즘과 CTF (44)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
        • CTF (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Java
    CS
    알고리즘
    AWS
    Spring
    SQL
    docker
    Security
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[정보처리기사 실기] 2025년 2회 기출문제 풀이
상단으로

티스토리툴바