정보처리기사 24년도 3회차

·2025년 4월 14일

just공부

목록 보기
14/41
post-thumbnail

1. 아래 자바 코드에서 출력되는 값을 작성하시오.

public class Main {
    static void func(String[] m, int n) {
        for (int i = 1; i < n; i++) {
            if (m[i-1].equals(m[i])) {  
                System.out.print("O");
            } else {
                System.out.print("N");
            }
        }

        for (String mo : m) {
            System.out.print(mo);
        }
    }

    public static void main(String[] args) {
        String[] m = new String[3];
        m[0] = "A";
        m[1] = "A";
        m[2] = new String("A");  
        func(m, 3);
    }
}

func(m, 3) 호출 -> for 문

  • i = 1 일 때, m[0].equals(m[1])
    • "A".equals("A") -> true
    • O
  • i = 2 일 때 m[1].equals(m[2])
    • "A".equals(new String("A")) -> true
    • O
  • equals() : 내용 비교를 하는 것이기 때문에 객체가 달라도 내용이 같으면 true

for-each

  • m[0] = "A"
  • m[1] = "A"
  • m[2] = new String("A")
  • AAA
코드설명
==객체의 주소 비교
equals문자열 내용 비교
"A" vs "A"리터럴 같은 객체 공유
"A" vs new String("A")다른 객체

정답

  • OOAAA

2. 아래 코드에서 출력되는 값을 작성하시오.

def test(lst):
	for i in range(len(lst) // 2):
		lst[i], lst[-i-1] = lst[-i-1], lst[i]
ls = [1,2,3,4,5,6]
test(ls)
print(sum(ls[::2]) - sum(ls[1::2]))
  • test() 함수
    • 리스트 길이인 6, 6//2 -> 3번 반복
    • lst[0] <-> lst[-1] => 1 <-> 6
    • lst[1] <-> lst[-2] => 2 <-> 5
    • lst[2] <-> lst[-3] => 3 <-> 4
    • ls = [6, 5, 4, 3, 2, 1]
  • print(sum(ls[::2]) - sum(ls[1::2]))
    • ls[::2] : 인덱스 처음부터 끝까지 2씩 jmp
    • ls[1::2] : 인덱스 1부터 끝까지 2씩 jmp
    • (6 + 4 + 2) - (5 + 3 + 1) = 3

정답

  • 3

4. LRU 페이지 교체 알고리즘에 따른 페이지 부재 횟수를 작성하시오. (프레임 3칸)

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

  • LRU 페이지 교체 알고리즘

    • LRU (Least Recently Used)
    • 가장 오래 전에 사용된 페이지를 제거
  • 7 70 701 012 120 203 230 304 042 423 230 203 032 321 312 120 201 017 170 701

정답

  • 12

5. 다음으로 알맞은 용어를 작성하시오

ICMP, 송신 주소를 공격 대상의 IP 주소로 위장하고, 수신 주소를 해당 네트워크 라우터의 브로드캐스트 주소로 설정하는 공격으로 과부화 시키는 기법은? ICMP 패킷을 크게 만들어서 과부화 시키는 죽음의 핑과 같은 서비스 공격 유형이다.

Smurff Attack

  • 다수가 특정 대상에게 ICMP Echo Reply를 보내 DoS 유발

TIP

  • 문제에서 "공격의 이름"을 묻는다면 → 스머프, 프래글, 시냅스 플러딩 등 명칭 답안
  • "어떤 기술이 사용되었는가"를 묻는다면 → spoofing, flooding, fragmentation 등이 답

정답

  • 스머핑

6. 아래 코드에서 출력되는 값을 작성하시오.

int increment(){
    static int x = 0;
    x += 2;
    return x;
}
int main(){
	int x = 1;
    int sum = 0;
    for(int i=0; i<4; i++){
    	x++;
        sum +=increment();
    }
    printf("%d", sum);
}
  • static int x : 정적 변수 선언

    • 함수가 여러 번 호출되어도 초기화가 한 번만 이루어져 이전 호출 시점의 값이 유지됨
  • 반복문

    ixsum
    i = 0x++ -> 2sum = 2
    i = 1x++ -> 4sum = 6
    i = 2x++ -> 6sum = 12
    i = 3x++ -> 8sum = 20

정답

  • 20

7. 다음으로 알맞은 용어를 작성하시오

인터넷을 통해 장치 간 사설 네트워크 연결을 생성하는 서비스로 장치의 실제 IP 주소를 가상 IP 주소로 대체하고, 데이터를 암호화하고, 데이터를 전 세계 보안 네트워크로 라우팅함으로써 정보를 보호하는 기법

헷갈려서 쓰는 TIP

  • VPN (Virtual Private Network)

    • 통신 사업자의 공중 네트워크와 암호화 기술을 이용하여 사용자가 마치 자신의 전용 회선을 사용하는 것처럼 해주는 보안 솔루션
    • 암호화된 규격을 통해 인터넷망을 전용선의 사설망을 구축한 것처럼 이용하므로 비용 부담을 줄일 수 있음
    • 두 장치 및 네트워크 사이에 암호화된 보안 터널이 생성, 이 터널에 사용되는 프로토콜에 따라 SSL VPN과 IPSec VPN 으로 나뉨
  • VLAN (Virtual Local Area Network)

    • 마치 단일 근거리 LAN에 속한 것처럼 작동하는 여러 장치 또는 네트워크 노드의 집합
    • 물리적으로는 동일한 네트워크 구성이나, 논리적으로는 분리된 네트워크

정답

  • VPN

8. 빈칸에 알맞은 용어를 작성하시오.

( ) 패턴은 객체 간의 상호 작용하는 방법과 책임을 분배하는 방법 에 중점을 두는 디자인 패턴으로 Command, Interpreter, Memento, Observer, Visitor등이 존재한다.

GoF Design Pattern

  • 생성 패턴
    • 객체를 생성되는 과정의 유연성을 높이고, 코드 유지를 쉽게 함
  • 구조 패턴
    • 프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는 데 활용할 수 있는 패턴
  • 행위 패턴
    • 반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들
패턴 영역생성구조행위
클래스- Factory Method- Adaptor- Interpreter
- Template Method
객체- Abstract Factory
- Builder
- Prototype
- Singleton
- Adaptor
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Chain of Responsibility
- Command
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Visitor

정답

  • 행위 패턴

9. 아래 설명에 맞는 테스트 커버리지를 보기에서 골라 기호로 작성하시오.

  1. 코드 내의 각 분기점이 true 또는 false로 평가될 때마다 해당 분기점이 모두 테스트 되는 것을 목표로 한다. 각 분기점이 모든 가능한 경로로 실행되었는지 확인하는 데 사용되는 커버리지 ( )

  2. 코드의 흐름을 여러 갈래로 나누는 조건문 또는 선택문을 의미한다. 예를 들어, if-else 문이나 switch 문에서 조건에 따라 실행 경로가 달라질 때를 의미한다. ( )

  3. 개별 조건문 내에 있는 각각의 조건이 true와 false 모두를 만족하도록 테스트하는 것을 의미한다. 예를 들어, if (A && B)와 같은 구문에서 A와 B가 각각 true와 false가 되는 경우를 테스트하는 것이 목표이다. ( )

(보기)
㉠ 결정(분기)/조건 커버리지
㉡ 결정(분기) 커버리지
㉢ 조건 커버리지
㉣ 분기 커버리지
㉤ 변경 조건/결정 커버리지
㉥ 문장(구문) 커버리지
㉧ 다중 조건 커버리지

풀이

커버리지설명
구문(문장) 커버리지모든 문장이 한 번 이상
조건 커버리지조건식에 상관 없이 개별 조건 T / F
결정 커버리지모든 조건식 T / F
조건/결정(분기) 커버리지조건 커버리지 개선
변형 조건/결정(분기) 커버리지
다중 조건 커버리지

정답

  • ㅂ, ㄹ, ㄷ

10. 아래 설명에 맞는 용어 보기에서 골라 빈칸에 작성하시오.

  1. 참조하는 테이블의 기본 키(Primary Key)를 가리키며, 데이터 무결성을 유지하는 데 중요한 역할을 한다. ( )
  2. 유일성과 최소성을 모두 갖춘 키이다. ( )
  3. 후보키 중에서 기본 키로 선택되지 않은 나머지 키이다. ( )
  4. 유일성을 만족시키지만, 최소성은 만족시키지 않는다.( )

(보기)
㉠ 슈퍼키
㉡ 외래키
㉢ 대체키
㉣ 후보키

Database key 특징

  • 유일성 : 유일한 값을 가져야 함
  • 최소성 : 최소한의 값으로 식별할 수 있어야 함
  • 불변성 : 변하는 값이면 안됨
  • 존재성 : 반드시 존재해야 함.
종류설명
슈퍼키- 유일성 O, 최소성 X
- 어떤 릴레이션의 어떤 튜플들도 같은 값을 가지지 않는 속성
후보키유일성 O, 최소성 O, Not NULL
- 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합
기본키유일성 O, 최소성 O, Not NULL
- 후보키 중 선정된 키
대체키유일성 O, 최소성 O, Not NULL
- 후보키 중 선정된 키본키를 뺀 나머지 키들
외부키- 다른 릴레이션의 PK를 참조하는 속성

정답

  • ㄴ 외래키
  • ㄹ 후보키
  • ㄷ 대체키
  • ㄱ 슈퍼키

11. 아래 설명에 맞는 번호를 그림에서 골라 작성하시오.

  • 추가적인 질의를 제공하는 부분으로, 웹 서버에 전달할 추가 데이터를 나타낸다.( )
  • 자원 경로를 나타내며, 서버 상에서 해당 리소스의 위치를 지정한다. ( )
  • 웹 프로토콜을 정의하는 부분으로, 예를 들어 HTTP, FTP 등의 방식을 나타낸다. ( )
  • 호스트와 포트 번호를 나타내는 부분으로, 서버 주소와 함께 포트번호를 나타낸다. ( )
  • 특정 페이지 내의 위치를 가리키며, 문서 내 특정 섹션으로 이동하는 데 사용된다. ( )

설명

  • URI (Uniform Resource Identifier)
    • scheme:[autority][path][?query][#fragment]
    • scheme : 접근 방식 또는 프로토콜(http, https, ftp, mailto...)
    • authority : 사용자 정보, 호스트명, 포트 등
    • path : 자원의 경로
    • query : 선택적 매개변수 (예: ?id=123)
    • fragment : 문서 내 특정 위치를 지정
  • URL(Uniform Resource Locator)
    • 자원의 위치를 식별

정답

  • 43125

12. 아래 코드에서 출력되는 값을 작성하시오.

struct Node {
    int value;
    struct Node* next;  
};

void func(struct Node* node) {
    while (node != NULL && node->next != NULL) {
        int t = node->value;
        node->value = node->next->value;
        node->next->value = t;
        node = node->next->next;
    }
}

int main() {
    struct Node n1 = {1, NULL};
    struct Node n2 = {2, NULL};
    struct Node n3 = {3, NULL};
    
    n1.next = &n3;  
    n3.next = &n2;

    func(&n1);

    struct Node* current = &n1;
    while (current != NULL) {
        printf("%d", current->value);  
        current = current->next;
    }
}

풀이

초기 상태

  • n1
    • value = 1
    • next = &n
  • n3
    • value = 3
    • next = &2
  • n2
    • value = 2
    • next = NULL
  • 연결리스트 : n1 -> n3 -> n2 -> NULL
    • 1, 3, 2

While문 첫 번째 반복

  • t = n1->value : t=1
  • n1->value = n1->next->value : n1->value = 3
  • n1->next->value = t : n3->value = 1
  • node = node->next->next : n1->next=n3이고, n3->next = n2 이므로 node = n2

While문 두 번째 반복

  • node = n2
  • node != NULL 참이지만, node->next != NULL 은 거짓
  • 반복문 종료

최종 리스트

  • n1->n3->n2->NULL

출력

  • 첫 번째 출력 : n1->value = 3
  • 두 번쨰 출력 : n3->value = 1
  • 세 번째 출력 : n2->value = 2
Noden1n3n2NULL
초기 상태value = 1value = 3value = 2
func() 실행 이후value = 3value = 1value = 2

정답

  • 312

13. 다음으로 알맞은 용어를 작성하시오.

( ) 무결성은 데이터베이스의 테이블에서 기본 키(Primary Key)값을 반드시 유일하고 NULL이 아니게 유지해야 한다는 규칙을 의미한다.

Database Integrity

  • 개체 무결성(Entity Integrity)
    • 테이블의 각 행이 고유하게 식별될 수 있도록 하는 제약 조건, 주로 기본키를 사용
  • 참조 무결성 (Referential Integrity)
    • 테이블 간의 관계에서 외래키를 통해 데이터의 일관성 보장
    • 두 테이블 간의 관계가 깨지지 않도록 함
  • 도메인 무결성 (Domain Integrity)
    • 각 속성이 특정한 데이터 타입과 값의 범위를 가지도록 하는 제약
    • 데이터 타입이나 NULL 값의 사용 여부 제한

정답

  • 개체

14. 아래 코드에서 출력되는 값을 작성하시오.

def test(v):
	if type(v) == type(""):
		return len(v)
	elif type(v) == type(100):
		return 101
	else:
		return 20
a = "100.0"  
b = 100.0 
c = (100.0, 200.0)
print(test(a) + test(b) + test(c))

풀이

  • if type(v) == type(""): : v가 문자열 타입이면, 문자열의 길이 반환

  • elif type(v) == type(100): : v가 정수(int) 타입이면, 101 반환

  • else: : 두 조건 다 아니면 20 반환

  • a는 문자열타입 -> len(a) = 5

  • b는 float 타입 -> 20

  • c는 tuple -> 20

정답

  • 45

15. 빈칸에 맞는 기호를 보기에서 골라 작성하시오.

UML (Unified Modeling Language)

  • 구조 다이어그램
    • 클래스 다이어그램
    • 객체 다이어그램
    • 복합체 구조 다이어그램
    • 배치 다이어그램
    • 컴포넌트 다이어그램
    • 패키지 다이어그램
  • 행위 다이어그램
    • 활동 다이어그램
    • 상태 머신 다이어그램
    • 유스케이스 다이어그램
    • 상호작용 다이어그램
    • 커뮤니케이션 다이어그램
    • 시퀀스 다이어그램
명칭표현설명
연관 관계────>객체간 개념적으로 연관
의존 관계- - - - - ->객체 변경 시 관계된 다른 객체도 변경
집합 관계────◇전체와 부분인 연관 관계
포함 관계────◆전체 소멸 시 부분도 소멸되는 집합 연관 관계
일반화 관계────▷일반화된 개념과 구체화된 객체의 관계
실체화 관계- - - - - -▷인터페이스와 그것을 실체로 구현한 객체의 관계

정답

  • ㄴ 연관, ㄷ 일반화, ㄱ 의존

16. 아래 코드에서 출력되는 값을 작성하시오.

public class Main {
	public static void main(String[] args) {
		int sum = 0;
		try {
			func();
		} catch(NullPointerException e) {
			sum = sum + 1;
		} catch(Exception e) {
			sum = sum + 10;
		} finally {
			sum = sum + 100;
		}
		System.out.print(sum);
	}
	static void func() throws Exception {
		throw new NullPointerException();
	}
}

풀이

  • func() 내부에서 throw new NullPointerException(); 구문을 만나 NullPointerException 예외 발생하여 호출한 곳으로 전달
  • 첫 번째 catch 블록인 catch(NullPointerException e) 예외 타입과 일치 -> 블록 실행
    • sum = sum + 1; 이므로, sum = 1
  • 두 번째 catch 블록은 실행 X
  • finally 블록 실행
    • sum = sum + 100; 이 실행되므로, sum = 101

TIP

  • NullPointerException은 Exception의 하위 클래스라서,
    • 만약 catch(Exception e)catch(NullPointerException e) 보다 앞에 위치했다면
    • 모든 예외가 catch(Exceptione) 에서 처리됨
  • Exception e 를 먼저 작성하면
    • NullPointerException e는 실행되지 않고,
    • 코드가 컴파일 되지 않음.

정답

  • 101

17. 아래 코드에서 출력되는 값을 작성하시오.

class B {
	int x = 3;
	int getX() {
		return x * 2;
	}
}

class A extends B {
	int x = 7;
	@Override
	int getX() {
		return x * 3;
	}
}

public class Annotation {
	public static void main(String[] args) {
		B b1 = new A(); 
		A b2 = new A(); 
		System.out.print(b1.getX() + b1.x + b2.getX() + b2.x);
	}
}

풀이

  • 객체 b1
    • 선언 타입 : B
    • 실제 인스턴스 : A
  • 객체 b2
    • 선언 타입 : A
    • 실제 인스턴스 : A
  • 메소드 오버라이딩 (동적 바인딩)
    • b1.getX() : 실제 인스턴스가 A이므로, A의 getX()를 호출하여 21을 반환
    • b2.getX() : A의 getX()를 호출하여 21 반환
  • 필드 접근 (정적 바인딩)
    • 필드는 오버라이딩X, 참조 변수의 선언 타입에 따라 결정
    • b1.x : b1의 선언 타입은 B -> 3
    • b2.x : b2의 선언 타입은 A -> 7
  • 21 + 3 + 21 + 7 = 52

정답

  • 52

18. 아래 코드에서 출력되는 값을 작성하시오.

class Printer{
	void print(Integer a){
    	System.out.print("A" + a);
    }
    void print(Object a){
    	System.out.print("B" + a);
    }
    void print(Number a){
    	System.out.print("C" + a);
    }
}
public class Generic{
	public static void main(String[] args){
    	new Container<>(0).print();
    }
    public static class Container{
    	T value;
        public Container(T t){
        	value = t;
        }
        public void print(){
        	new Printer().print(value);
        }
    }
}

풀이

  • Generic T는 매개변수에 맞추어 타입을 변경하여 사용 가능하나, T 자체의 Type은 Object가 됨
  • Overload 결정 시, 전달되는 인수의 컴파일타입이 Object가 되어, Printer 클래스의 오버로딩된 메소드들 중
  • print(Object a)가 호출됨
  • new Container<>(0).print(); 에서 0은 autoboxing이 되어 Integer가 되지만
  • Container 클래스가 generic으로 선언되지 않아 value의 타입은 Object로 취급됨.

정답

  • B0

20. 아래 설명에 맞는 용어를 작성하시오.

중앙 집중식 인프라 없이, 즉 사전 설정된 네트워크 기반 시설이 없이 구성된 자율형 네트워크를 의미합니다. 이러한 네트워크는 노드(주로 무선 장치)가 서로 직접 연결하여 통신하며, 군사 작전 중에 실시간으로 정보를 공유하기 위한 네트워크로 사용된다.

정답

  • 애드혹 네트워크(Ad-hoc network)
profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글