자격증 요약/정보처리기사

[24년 1회] 정보처리기사 실기 문제 풀이

문성 2026. 2. 24. 13:00

 


1. 다음 Java 코드에서 알맞는 출력 값을 작성하시오.

class Connection {
    private static Connection _inst = null;
    private int count = 0;
    static public Connection get() {
        if(_inst == 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();
        Connection conn2 = Connection.get();
        conn2.count();
        Connection conn3 = Connection.get();
        conn3.count();
        conn1.count();
        System.out.print(conn1.getCount());
    }
}
답: 4
                               

class Connection {
    private static Connection _inst = null;
private : 해당 클래스 내부에서만 볼 수 있고, 수정할 수 있음.
static : 모든 Connection 객체가 공유하는 단 하나뿐인 값
 public : 어떤 클래스에서든 자유롭게 부르고 사용할 수 있음

                               

 

 

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

#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);
}
답: 151
                               

int main() {
    int v1 = 0, v2 = 35, v3 = 29;
→ 변수 정의

    if(v1 > v2 ? v2 : v1) {
v1 > v2 ? : 0 > 35 → 거짓
v2 : v1 : (참:거짓) 거짓이므로 v1 이 실행됨.
→ 즉, if(0) 이 됨
→ C언어에서 if(0) 은 거짓(False)으로 간주함


        v2 = v2 << 2;
→ 참일 때 실행되는 부분이므로 실행 안 됨

    }else{
        v3 = v3 << 2;
→ 거짓이므로 실행 됨


    printf("%d", v2+v3);
→ 35 + 116

 

 

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

[보기] ㄱ. 기능ㄴ. 교환ㄷ. 우연ㄹ. 시간
답: ㄱ, ㄴ, ㄹ, ㄷ

 

 

4. 다음은 C언어에 대한 문제이다. 알맞는 출력 값을 작성하시오.

#include <stdio.h>
#include <string.h>
void reverse(char* str){
    int len = strlen(str);
    char temp;
    char*p1 = str;
    char*p2 = str + len - 1;
    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);
    for(int i=1; i<len; i+=2){
        printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}
답: GECA
                               
문자열 뒤집기(Reverse) 알고리즘과 포인터 연산, 그리고 반복문의 증감식 문제

 

 

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

[보기]
192.168.35.0
192.168.35.72
192.168.36.0
192.168.36.249
129.200.8.0
129.200.8.249
답: 
2)192.168.35.72
4)129.200.8.249
5)192.168.36.249

 

 

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

답: 제3정규형

 

 

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

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

 

 

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

(1) 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환한다.
(2) 조건이 정확하게 '=' 등호로 일치하는 결과를 반환한다.
(3) ( (2) ) 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복된 속성을 제거한 결과를 반환한다.
답: (1) 세타 조인 (2) 동등 조인 (3) 자연 조인

 

 

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

페이지 참조 순서 : 1, 2, 3, 1, 2, 4, 1, 2, 5, 7
(1) LRU :
(2) LFU :
답 : (1) : 6  (2) : 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 → (     ) → (     ) → (     ) → (     ) → (     )
답: ⑤ → ⑥ → ③ → ① → ⑦ → ②
                               

 

 

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

#include <stdio.h>
typedef struct{
    int accNum;
    double bal;
}BankAcc;
double sim_pow(double base, int year){
    int i;
    double r = 1.0;
 
    for(i=0; i<year; i++){
        r = r*base;
    }
    return r;
} 
void initAcc(BankAcc *acc, int x, double y){
    acc -> accNum = x;
    acc -> bal = y;
}
void xxx(BankAcc *acc, double *en){
    if (*en > 0 && *en < acc -> bal) {
        acc -> bal = acc -> bal-*en;
    }else{
        acc -> bal = acc -> bal+*en;
    }
}
void yyy(BankAcc *acc){
    acc -> bal = acc -> bal * sim_pow((1+0.1),3);
}
int main(){
    BankAcc myAcc;
    initAcc(&myAcc, 9981, 2200.0);
    double amount = 100.0;
    xxx(&myAcc, &amount);
    yyy(&myAcc);
    printf("%d and %.2f", myAcc.accNum, myAcc.bal);
    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)
답: Seynaau
                               
a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"] 
→ 리스트 정의

str = "S"
→ 변수 정의

for i in a:
→ a의 리스트를 i에 하나씩 넣기

    str = str + i[1]
str : S
i[1] : i[1]의 위치에 있는 값

print(str)
→ S+e+y+n+a+a+u

 

 

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

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

 

답:

                               

SELECT B
FROM R1
→ B를 선택
→ R1 테이블에서


WHERE C IN (SELECT C FROM R2 WHERE D="k");
SELECT C FROM R2 : R2 테이블에서 C선택
WHERE D="k" : D에서 "k" 인것만 선택
WHERE C IN : C에서 두번째 SELECT에서 선택된 것만 선택

최종적으로 B셀 선택

※ 파란색 → 녹색 → 주황색 → 노란색으로 읽을 수 있다.

 

 

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

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

 

 

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

- 인터넷 공격자의 존재를 숨기면서 이 공격자에게 시스템에 대한 무제한 접근 권한을 부여하는 악성 프로그램이다.
- 해커가 자신의 존재를 숨기면서 허가되지 않은 컴퓨터나 소프트웨어에 접근할 수 있도록 설계된 도구이다.
- 일반적으로 펌웨어, 가상화 계층 등의 다양한 시스템 영역에서 작동하며, 운영체제의 시스템콜을 해킹하여 악성코드의 실행여부를 숨겨 안티바이러스 탐지를 우회할 수 있다.
[보기] ㄱ.Worm    ㄴ.Trojan horse    ㄷ.Backdoor     ㄹ.Virus     ㅁ.Ransomware      ㅂ.Spyware     ㅅ.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);
        one.print();
    }
}
답: 9
                               

 

 

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

- 불특정 다수가 아닌 명확한 표적을 정하여 지속적인 정보수집 후 공격 감행할 수 있다.
- 시스템에 직접 침투하는 것뿐 아니라 표적 내부직원들이 이용하는 다양한 단말을 대상으로 한다.
- 한가지 기술만이 아닌 Zero-day 취약점, 악성코드 등 다양한 보안 위협 공격 기술을 사용한다.
- 일반적으로 공격은 침투, 검색, 수집 및 유출의 4단계로 실행되며, 각 단계별로 다양한 공격 기술을 사용한다.
[보기] ㄱ.사회공학 기법  ㄴ.Adware  ㄷ.MITM  ㄹ.XDR  ㅁ.Replace attack  ㅂ.key logger attack  ㅅ.APT
답: ㅅ

 

 

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

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


→ 1개만 선택된다. COUNT(*) 이므로, 출력값은 1
→ ※ or 먼저한 뒤에 and를 한다.

 

 

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

#include<stdio.h>
#include<ctype.h>
int main(){
    char*p = "It is 8";
    char result[100];
    int i;
    for(i=0; p[i]!='\0'; i++){
        if(isupper(p[i]))
            result[i] = (p[i]-'A'+5)% 25 + '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] = '\0';
    printf("%s\n",result);
    return 0;
}
답: Nd sc 1
                               

int main(){
    char*p = "It is 8";
    char result[100];
    int i;
→ 변수 정의

※ isupper : '대문자'인지 확인

islower : '소문자'인지 확인
isdigit : '숫자(0~9)'인지 확인
※ isalpha : '알파벳(대문자or소문자)'인지 확인
※ isalnum : '알파벳 or 숫자'인지 확인
※ isspace : '공백 문자(스페이스, 탭, 줄바꿈)'인지 확인

                               

    for(i=0; p[i]!='\0'; i++){
        if(isupper(p[i]))
            result[i] = (p[i]-'A'+5)% 25 + '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] = '\0';
    printf("%s\n",result);

result[i] = '\0' : printf 함수 안에 NULL을 만나면 출력을 멈춰라는 로직으로 설계

※ %s : 문자열 출력(문장 전체)
※ \n : 줄바꿈(엔터키)
※ %c : 글자 하나 출력

 

 

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

- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.
- 연관성이 있는 객체군이 여러 개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로묶은 객체군을 구현화하는 생성패턴이다.
- 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다.
- kit라고도불린다.
답: Abstract Factory (추상 팩토리)