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

·2025년 4월 9일

just공부

목록 보기
12/41

2024년 1회 정보처리기사 실기 문제 및 풀이

1. 알맞은 출력 값 작성해라

class Connection {
 
    private static Connection _inst = null;
	// 자기 자신의 인스턴스를 static으로 갖고 있음
	// 초기에 null 이므로 아직 인스턴스 없는 상태

    private int count = 0;
    
    static public Connection get() {
        if(_inst == null) { // null일 경우에만 새 객체 생성
            _inst = new Connection();
            return _inst;
		}// 이미 객체가 있다면 그 객체를 그대로 반환 (항상 동일한 인스턴스 반환)
        return _inst;
    }
    
    public void count() {
         count++; 
    }
    
    public int getCount() {
         return count; 
    }
}
 
 
public class main {  
 
    public static void main(String[] args) {
 
        Connection conn1 = Connection.get();
        conn1.count(); // count = 1 , conn1 이 첫 객체
 
        Connection conn2 = Connection.get(); // conn2는 conn2와 같은 객체
        conn2.count();  // count = 2
 
        Connection conn3 = Connection.get();
        conn3.count(); // count = 3 
        
        conn1.count(); // count = 4
        System.out.print(conn1.getCount()); //4 출력
    }
 
}
  • 4

2. 알맞는 출력 값을 작성하시오.

#include <stdio.h>

int main() {

    int v1 = 0, v2 = 35, v3 = 29;

    if(v1 > v2 ? v2 : v1) {

        v2 = v2 << 2;

    }else{

        v3 = v3 << 2;

    }

    printf("%d", v2+v3);

}
  • 29 = 11101 인데 왼쪽으로 2비트 이동하는 것이니
  • 1110100
  • 64 +32 + 16 +4 = 116
  • 35+116 = 151

3. 응집도와 관련해서 보기에서 응집도가 높은 순으로 나열하시오.

보기
ㄱ. 기능 ㄴ. 교환 ㄷ. 우연 ㄹ. 시간

  • ㄱ ㄴ ㄹ ㄷ

  • 응집도 낮은 -> 높은 순서!!
    우논시절통순기 (우연 - 논리 - 일시 - 절차 - 통신 - 순차 - 기능)
    우리 논산 시절 기억나 통순대와 교자 기대했는데

  • 결합도 높은 -> 약한 순서 !!
    내공외제스자 (내용 - 공유 - 외부 - 제어 - 스탬프 - 자료)
    내공은 외제 걸로 쓰자

4. 알맞은 값 출력

#include <stdio.h>
#include <string.h>

void reverse(char* str){
    int len = strlen(str); // 8
 
    char temp;
    char*p1 = str; // "A"
    char*p2 = str + len - 1; //"A" + 7 = "H"

    while(p1<p2){ 
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}

int main(int argc, char* argv[]){
    char str[100] = "ABCDEFGH";
    reverse(str);

    int len = strlen(str); // HGFEDCBA
    
    for(int i=1; i<len; i+=2){ 
        printf("%c",str[i]); // 1,3, 5,7 GECA
    }

    printf("\n");

    return 0;

}
  • GECA

5. 아래 그림에서의 네트워크에서 라우터을 통한 할당 가능한 2번, 4번, 5번의 IP를 작성하시오.

1 > 192.168.35.3/24
4 > 129.200.10.16/22
5 > 192.168.36.24/24


보기
192.168.35.0
192.168.35.72
192.168.36.0
192.168.36.249
129.200.8.0
129.200.8.249

  • 192.168.35.72
  • 129.200.8.249
  • 192.168.36.249

풀이

2>

  • 서브넷 마스크 255.255.255.0
  • 네트워크 주소 : 192.168.35.0
  • 브로드캐스트 주소 : 192.168.35.255
  • 할당 가능한 주소 범위 : 192.168.35.1 ~ 192.168.35.254

4>

  • 서브넷 : 255.255.252.0 -> 1111 1100 0000 0000
  • 네트워크 주소 : 129.200.10.16 -> 0000 1010 -> 0000 1000
    • 129.200.8.0
  • 할당 가능한 주소 범위 : 129.200.8.1 ~ 129.200.11.254

5>

  • 서브넷 : 255.255.255.0
  • 네트워크 주소 : 192.168.36.0
  • 브로드캐스트 주소 : 192.168.35.255
  • 할당 가능한 주소 범위 : 192.168.36.1 ~ 192.168.36.254

6. 아래 표에서 나타내고 있는 정규형을 작성하시오

고객아이디강좌명강사번호
apple영어회화P001
banana기초토익P002
carrot영어회화P001
carrot기초토익P004
orange영어회화P003
orange기초토익P004
  • 1NF : 원자값 충족 여부

    • 모든 필드는 원자값이어야 함
    • 1NF 만족
  • 2NF : 부분 함수 종속 제거

    • 기본키가 복합키일 경우, 부분 함수 종속이 없어야 함

    • 중복을 고려했을 때 (고객아이디+강좌명)이 기본키

    • 같은 강좌명이 다른 강사번호를 갖는 경우

    • 강좌명 -> 강사번호는 성립하지 않음

    • 강사번호는 고객아이디+강좌명이라는 전체 기본키에 완전 함수 종속

    • 정규화 수행 (-> 2NF로 나누기)
      1) 고객강좌 테이블

      고객아이디강좌명
      apple영어회화
      banana기초토익
      carrot영어회화
      carrot기초토익
      orange영어회화
      orange기초토익

      2) 강좌 - 강사 테이블

      강좌명강사번호
      영어회화P001
      영어회화P003
      기초토익P002
      기초토익P004
  • 3NF : 다른 기본키가 아닌 속성에 이행적 함수 종속되면 안 됨

    • 기본키 : (고객아이디, 강좌명)
    • 비기본키 속성 : 강사번호
    • 강좌명 -> 강사번호 성립하지 않아서 okok

7. 아래의 내용에서 설명하는 네트워크 용어를 영문 약자로 작성하시오.

  1. 대표적인 링크 상태 라우팅 프로토콜이다. 이것은 인터넷에서 연결된 링크의 상태를 감시하여 최적의 경로를 선택한다는 것이다
  2. 단일 자율 시스템 내에서 라우팅 정보를 배포하는 데 사용되는 내부 게이트웨이 프로토콜이다
  3. 모든 대상에 도달하기 위한 최단 경로를 구축하고 계산하며 최단 경로는 Dijkstra 알고리즘을 사용하여 계산된다.
  • OSPF (Open Shortest Path First)

8. 아래 내용의 각각의 설명에 대한 답을 작성하시오.

(1) 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환한다.

(2) 조건이 정확하게 '=' 등호로 일치하는 결과를 반환한다.

(3) (2) 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복된 속성을 제거한 결과를 반환한다.

  • 세타 조인
  • 동등 조인
  • 자연 조인

  • 조인 (Join) 개념 정리
    • 두 개 이상의 릴레이션을 조건에 따라 결합하여 하나의 결과를 만드는 연산
  • 세타 조인 : 조건을 만족 | R.a < S.b
  • 동등 조인 : 조건이 = 다 | R.id = S.id
  • 자연 조인 : 중복 제거

9. 운영체제 페이지 순서를 참고하여 할당된 프레임의 수가 3개일 때 LRU와 LFU 알고리즘의 페이지 부재 횟수를 작성하시오.

페이지 참조 순서 : 1, 2, 3, 1, 2, 4, 1, 2, 5, 7
(1) LRU : 6
(2) LFU : 6

  • 1 - 1 2 - 1 2 3 - 2 3 1 - 3 1 2 - 1 2 4 - 2 4 1 - 4 1 2 - 1 2 5 - 2 5 7
  • 1 - 1 2 - 1 2 3 - 11 2 3 - 11 22 3 - 11 22 4 - 111 22 4 - 111 222 4 - 111 222 5 - 111 222 7
  • 페이지 부재 : 페이지가 메모리에 없어서 디스크에서 불러와야 하는 경우

  • 프레임 : 메모리에 올릴 수 있는 페이지 수

  • 참조 순서 : 프로그램이 순차적으로 접근한 페이지 번호

  • LRU (Least Recently Used)

    • 가장 오래 전 사용한 페이지를 교체하는 방법
  • LFU (Least Frequently Used)

    • 참조 횟수가 가장 적은 페이지를 교체하는 방법
    • 참조 횟수가 동일할 경우, 가장 오래된 것을 교체
  • 두 경우 다 페이지 부재 수 : 6

10. 아래 JAVA언어 코드의 실행 순서를 중복 번호없이 작성하시오.

class Parent {
    int x, y;
 
    Parent(int x, int y) {this.x=x;
        this y=y;
    }
 
    int getT() {return x*y;
    }
}class Child extend Parent {
    int x;
 
    Child (int x) {super(x+1, x);
        this.x=x;
    }
 
    int getT(int n){return super.getT()+n;
    }
}
 
 
 
class Main {
    public static void main(String[] args) {Parent parent = new Child(3);System.out.println(parent.getT());}
}

실행 순서 : 5( )( )( )( )( )
  • 6 3 1 7 2

풀이

  • 가장 먼저 main 클래스 -> 5번 실행
  • 생성자Child(int x) 호출 -> 6번 실행
  • Child(int x) 실행되어 생성자 진입 -> 3번 실행
    • 자식 생성자에서 super() 호출해서 부모 생성자가 먼저 실행됨
  • super(x+1, x) 로 부모 클래스의 생성자 호출 -> 1번 실행
    • this.x=x 실행되어 자식의 int x가 초기화됨
  • 메인클래스로 돌아와서 출력문 안에서 parent.getT() 실행 -> 7번 실행
    • Parent 타입의 변수이고, 오버로딩된 것이기에 parent.getT()를 호출
    • 자식의 getT(int n)은 오버로딩
  • Parent.getT() 호출받아 진입 -> 2번 실행

11. 다음 C언어의 알맞는 출력값을 작성하시오.

#include 
 
 
typedef struct{
    int accNum;
    double bal;
}BankAcc;
 
 
 
double sim_pow(double base, int year){ // 1.1 , 3
    int i;
    double r = 1.0;
 
	for(i=0; i < year; i++){  // 3번
	        r = r * base; // 1.0 * 1.1 
	    }
	return r;  //1.331
}
 
 void initAcc(BankAcc *acc, int x, double y){
    acc -> accNum = x; // 9881
    acc -> bal = y; // 2200.0
}
 
void xxx(BankAcc *acc, double *en){ //  myacc, 100.0
    if (*en > 0 && *en < acc - > bal) {
        acc - > bal = acc - > bal-*en; // bal = 2100.0 
    }else{
        acc - > bal = acc - > bal+*en;
    }
}
 
void yyy(BankAcc *acc){ // myacc
    acc -> bal = acc -> bal * sim_pow((1+0.1),3); // sim_pow -> 1.331 
	    // bal = 2795.1
}
 
int main(){
 
    BankAcc myAcc;
    initAcc(&myAcc, 9981, 2200.0);
    double amount = 100.0;
    xxx(&myAcc, &amount); // accNum = 9881 bal = 2100.0
    yyy(&myAcc);
    printf("%d and %.2f", myAcc.accNum, myAcc.bal); // 9981 and 2795.10
    return 0;
 
}
  • 9981 and 2795.10

12. 다음 파이썬 코드에 대한 알맞는 출력 값을 작성하시오.

a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"] 
str = "S"
 
for i in a:
    str = str + i[1]
 
print(str)
  • str = Se
  • str = Sey
  • str = Seyn
  • str = Seyna
  • str = Seynaa
  • str = Seynaau

13. 아래 보기의 SQL 문장과 테이블을 참고하여 출력 값을 표로 작성하시오.

QUESTION

SELECT
B
FROM
R1
WHERE
C IN (SELECT C FROM R2 WHERE D="k");

B
a
b

14. 아래는 애플리케이션 테스트 관리에 대한 내용이다. 설명하는 답을 보기에서 골라 작성하시오.

Question

  1. 모든 분기와 조건의 조합을 고려하나 모든 조합을 테스트하는 대신에 테스트가 필요한 중요한 조합을 찾아내는 데에 중점을 둔다.
  2. 특정 조건을 수행할 때 다른 조건과는 상관없이 전체 결과에 영향을 미치는 조건만을 테스트한다.
  3. 각각의 파라미터는 적어도 한 번은 최종 결과에 영향을 주어야 한다.
    보기
    ㄱ. 구문 커버리지 ㄴ. 결정 커버리지 ㄷ. 조건 커버리지 ㄹ. 변경 조건/결정 커버리지 ㅁ.다중 조건 커버리지 ㅂ.경로 커버리지 ㅅ.조건/결정 커버리지
  • 변경 조건/결정 커버리지

풀이

  • 구문 커버리지 : 모든 구문을 최소 1번 실행
  • 결정 커버리지 : 모든 분기 결과 (T/F) 한 번씩 실행
  • 조건 커버리지 : 각 개별 조건의 T/F 한 번씩 실행
  • 변경 조건/결정 커버리지 : 결정에 영향을 미치는 개별 조건을 분리 테스트
  • 다중 조건 커버리지 : 모든 조건을 조합 테스트
  • 경로 커버리지 : 모든 실행 경로를 테스트
  • 조건/결정 커버리지 : 조건 커버리지 + 결정 커버리지 결합

15. 다음 아래 내용을 보고 보기에서 알맞는 용어를 골라 작성하시오.

Question

인터넷 공격자의 존재를 숨기면서 이 공격자에게 시스템에 대한 무제한 접근 권한을 부여하는 악성 프로그램이다.

해커가 자신의 존재를 숨기면서 허가되지 않은 컴퓨터나 소프트웨어에 접근할 수 있도록 설계된 도구이다.

일반적으로 펌웨어, 가상화 계층 등의 다양한 시스템 영역에서 작동하며, 운영체제의 시스템콜을 해킹하여 악성코드의 실행여부를 숨겨 안티바이러스 탐지를 우회할 수 있다.

보기
ㄱ.Worm ㄴ.Trojan horse ㄷ.Backdoor ㄹ.Virus ㅁ.Ransomware ㅂ.Spyware ㅅ.Rootkit

  • Rootkit

16. 다음 Java 코드를 보고 알맞는 출력 값을 작성하시오.

class classOne {
    int a, b;
 
    public classOne(int a, int b) {
        this.a = a;
        this.b = b;
    }
 
    public void print() {
        System.out.println(a + b);
    }
 
}
class classTwo extends classOne {
    int po = 3;
    
    public classTwo(int i) {
        super(i, i+1);
    }
 
    public void print() {
        System.out.println(po*po);
    }
}
 
public class main {  
    public static void main(String[] args) {
        classOne one = new classTwo(10); // 10, 11
        one.print(); 
    }
}
  • oneclassOne 타입의 변수지만, classTwo 인스턴스를 참조하고 있음
  • 오버라이딩된 메소드 호출하게 됨
  • 다형성이 적용되어, classTwo에 정의된 print()가 호출되는 것.

17. 다음 아래 내용을 보고 보기에서 알맞는 용어를 골라 작성하시오.

Question

  1. 불특정 다수가 아닌 명확한 표적을 정하여 지속적인 정보수집 후 공격감행할 수 있다.
  2. 시스템에 직접 침투하는 것뿐 아니라 표적 내부직원들이 이용하는 다양한 단말을 대상으로 한다.
  3. 한가지 기술만이 아닌 Zero-day 취약점, 악성코드 등 다양한 보안 위협 공격 기술을 사용한다.
  4. 일반적으로 공격은 침투, 검색, 수집 및 유출의 4단계로 실행되며, 각 단계별로 다양한 공격 기술을 사용한다.

보기
ㄱ.사회공학 기법 ㄴ.Adware ㄷ.MITM ㄹ.XDR ㅁ.Replace attack ㅂ.key logger attack ㅅ.APT

  • APT

풀이

  • XDR : Extended Detection and Response
  • MITM : Man in the Middle, 네트워크 통신을 가로채 침투투

18. 아래의 SQL 코드와 테이블을 참고하여 결과 값을 작성하시오.

SELECT
COUNT(*)
FROM
TABLE
WHERE
EMPNO > 100
AND
SAL >= 3000 OR EMPNO = 200

  • 1

19. 다음 C언어 코드의 알맞는 출력 값을 작성하시오.

#include
 
int main(){
    char*p = "It is 8"; //7
    char result[100];
    int i;
 
    for(i=0; p[i]!=''; i++){  
        if(isupper(p[i])) 
            result[i] = (p[i]-'A'+5)% 26 + 'A';  // (I - A + 5) % 26 + A
        else if(islower(p[i]))
            result[i] = (p[i]-'a'+10)% 26 + 'a';
        else if(isdigit(p[i]))
            result[i] = (p[i]-'0'+3)% 10 + '0';
        else if(!(isupper(p[i]) || islower(p[i]) || isdigit(p[i])))    
            result[i] = p[i];
    }
 
    result[i] = '';
    printf("%sn",result);
 
    return 0;
}
  • result[0] = (I - A + 5) % 26 + A => A+13 = N

  • result[1] = (t - a + 10 ) % 26 + a => a+3 = d

  • result[2] = " "

  • result[3] = (i - a + 10 ) % 26 + a => 18+a = s

  • result[4] = (s - a + 10 ) % 26 + a => 2 + a = c

  • result[5] = " "

  • result[6] = ('8'-'0'+3) % 10 + '0' = '1'

  • 01234 56789 1011121314 1516171819
    abcde fghij klmno pqrst

  • Nd sc 1

20. 다음 아래의 내용을 보고 알맞는 용어를 작성하시오.

구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.

연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴이다

관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다.
kit라고도 불린다.

  • Abstract Factory

풀이

  • 디자인 패턴 : SW 개발에서 자주 발생하는 문제에 대해 검증된 해결 방법을 정형화한 것

    • GoF (Gang of Four) 의 디자인 패턴 23개
    분류목적대표 패턴
    생성객체 생성 방법 추상화, Factory Method싱글톤, 팩토리 메소드, 추상 팩토리, 빌더, 프로토타입
    구조클래스/객체의 구조 설계, Adapter어댑터, Decorator, 프록시, 브릿지, Composite, 퍼사드
    행위객체 간의 상호작용Command, Interpretor, Iterator, Mediator, Memento, Observer, Visitor

생성 패턴

  • Singleton Pattern
    • 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해줌
  • Abstract Factory Pattern
    • 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스
  • Factory Method Pattern
    • 어떤 클래스의 인스턴스를 만들지 서브클래스에서 결정
    • 클래스 인스턴스 만드는 일을 서브클래스에게 맡김

구조 패턴

  • Decorator Pattern
    • 객체에 추가 요소를 동적으로 더할 수 있음
  • Proxy Pattern
    • 특정 객체로의 접근을 제어하는 대리인 제공
  • Composite Pattern
    • 객체를 트리구조로 구성하여 부분-전체 계층 구조를 표현
  • Adapter Pattern
    • 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환
  • Facade Pattern
    • 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어줌

행위 패턴

  • Template Method Pattern
    • 알고리즘 일부 단계를 서브클래스에서 구현 가능
    • 알고리즘의 구조는 유지하며 알고리즘의 특정 단계를 서브클래스에서 재정의 가능
  • State Pattern
    • 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음
  • Iterator pattern
    • 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법 제공
  • Strategy Pattern
    • 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 함
  • Observer Pattern
    • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의

REFERENCE

profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글