본문 바로가기

자격증/정보처리기사

[정처기실기] 2024년 2회


https://chobopark.tistory.com/483#google_vignette

 

[2024년 2회] 정보처리기사 실기 복원 문제

안녕하세요. 2024년 2회 정보처리기사 실기 기출문제를 정리해보았습니다.해당 복원된 기출문제가 많은 분들에게 도움이 되었으면 좋겠습니다.정보처리기사 개편안인 2020년 시험부터 2024년 2회

chobopark.tistory.com

 


 

 

1. 다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

 

class Main {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3, 4};
        int[] b = new int[]{1, 2, 3, 4};
        int[] c = new int[]{1, 2, 3};
        
        check(a, b);
        check(a, c); 
        check(b, c); 
    }
 
    public static void check(int[] a, int[] b) {
        if (a==b) {
            System.out.print("O");
        }else{
            System.out.print("N");
        }
        
    }
}

 

 

더보기

 

NNN


 

a, b, c 는 new로 생성한 각 배열 객체의 메모리 주소값.

Java에서 배열 객체는 참조 타입이기 때문에  a, b, c는 모두 다른 값을 가지게 된다.

배열 요소값을 비교하려면 Arrays.equals(a, b) 메서드로 비교!

 

 

 

 

 

( * 정규화, 반정규화 * )

2. 다음 문제에서 설명하는 용어를 작성하시오.

 

데이터를 중복시켜 성능을 향상시키기 위한 기법으로 데이터를 중복 저장하거나

테이블을 합치는 등으로 성능을 향상시키지만 데이터 무결성이 저하될 수 있는 기법

 

더보기

 

반정규화 / 비정규화 / 역정규화


 

정규화된 데이터 모델을 분할, 통합, 추가하는 데이터 모델링 기법.

의도적으로 정규화에 위배되는 행위.

시스템 성능 향상, 개발 과정 편의 목적

 

 

 

 

 

3. 다음은 SQL에 관한 문제이다. 아래 SQL 구문의 빈칸을 작성하시오

 

테이블

사원 [사원번호(PK), 이름, 나이, 부서]

부서 [사원번호(PK), 이름, 주소, 나이]

 

신입 사원이 들어와서 사원 테이블에 추가

INSERT INTO 사원 (사원번호, 이름, 주소, 부서)   [      ①     ] (32431, '정실기', '서울', '영업');

 

위에 신입사원을 검색하면서 부서 테이블에 추가

INSERT INTO 부서 (사원번호, 이름, 나이, 부서)

[         ] 사원번호, 이름, 나이, 23 FROM 사원 WHERE 이름 = '정실기';

 

전체 사원 테이블 조회

SELECT  *   [       ]   사원;

 

퇴사로 인해 부서에 해당하는 값을 '퇴사'로 변경

UPDATE 사원   [           ]   부서  =  '퇴사'  WHERE 사원번호  = 32431;

 

 

더보기

 

VALUES  /  VALUES  /  FROM  /  SET

 


 

SELECT * FROM Table WHERE ~ ;

UPDATE Table SET col1 = 'value1', col2 = value2'  WHERE ~ ;

INSERT INTO Table (col1, col2, col3) VALUES (val1, val2, val3);   

or   INSERT INTO Table VALUES (val1, val2, val3, val4, val5);

DELETE FROM Table WHERE ~ ;

 


CREATE TABLE TableName (

     col1 INT PRIMARY KEY,

     col2 VARCHAR(50),

     col3 DATE

);

CREATE INDEX idx_col1 ON TableName(col1);

 

ALTER TABLE TableName ADD newColumn VARCHAR(100);

ALTER TABLE TableName DROP COLUMN col2;

ALTER TABLE TableName MODIFY col2 VARCHAR(100);

ALTER TABLE TableName RENAME TO NewTableName;

 

DROP TABLE TableName;

DROP INDEX idx_col1;

 

TRUNCATE TABLE TableName;   _ 테이블의 모든 데이터를 삭제하지만 테이블 구조는 남음.

 


 

[ SQL 실행 순서 ]

FROM 절 -> WHERE 절 -> GROUP BY 절 -> HAVING 절 -> SELECT 절 -> ORDER BY 절

 

* SELECT절에서 GROUP BY에 포함되지 않은 컬럼을 선택하려면, 

  해당 컬럼이 집계함수(SUM, COUNT, AVG 등)와 함께 사용되어야 함.

 

 

 

 

4. 다음 릴레이션의 Cardinality와 Degree를 작성하시오.

 

Cardinality : (  ①  )

Degree      : (  ②  )

 

더보기

 

Cardinality : 5

Degree : 4

 


 

* Cardinality : 테이블 행(row) 또는 레코드(record)의 수, 특정 컬럼에 대한 고유값의 수

* Degree : 테이블의 열(column) 또는 속성(attribute)의 수 (필드의 갯수) 

 

 

 

 

 

( * 네트워크 보안 솔루션, IPSec, IP Security *)

5. 다음은 프로토콜에 대한 내용이다. 아래 내용을 읽고 알맞는 답을 작성하시오.

 

- Network layer에서 IP패킷을 암호화하고 인증하는 등의 보안을 위한 표준이다. 

- 기업에서 사설 인터넷망으로 사용할 수 있는 VPN을 구현하는데 사용되는 프로토콜이다.
- AH(Authentication Header)와 ESP(Encapsulating Security Payload)라는 두 가지 보안 프로토콜을 사용한다.

 

더보기

 

IPSec (IP Security)

 


 

(* 2020년 2회 8번 *)

* IPSec (IP Security) _ 양방향 암호화 지원  

 : 네트워크 계층 (Network layer, 3계층)에서 IP패킷 단위의 데이터 변조 방지 및 암호화 기능을 제공하는 보안 프로토콜.

 - AH (Authentication Header) : 패킷의 무결성인증을 제공.

 - ESP (Encapsulating Security Payload) : 패킷의 암호화무결성, 인증을 제공.

 

(* 2023년 1회 6번 *)

* L2TP (Layer 2 Tunneling Protocol)

 : 데이터링크 계층 (Data Link Layer, 2계층) 에서 동작하는 터널링 프로토콜.

  => 자체적인 암호화 기능이 없어 다른 보안 프로토콜(IPSec 등)과 같이 사용.

 

 

* SSL (Secure Sokets Layer) / TLS (Transport Layer Security)

 : 전송 계층 (Transport Layer, 4계층) 에서 클라이언트와 서버 간의 안전한 통신을 보장하는 프로토콜.

 => 데이터의 암호화 인증 제공. SSL의 더 안전한 버전이 TLS.

 

 

(* 2023년 1회 7번 *)

* SSH (Secure Shell)

: 응용 계층 (Application Layer, 7계층) 에서 원격 시스템에 안전하게 접속하기 위해 사용되는 프로토콜.

  SSH 터널링, 22 포트,  VPN보다 가벼운 용도로 사용,  IP spoofing 방지.

 

 

(* 2022년 2회 5번 *)

* VPN (Virtual Private Network, 가상 사설망)

공용 네트워크(인터넷)를 통해 안전하고 암호화된 연결을 제공하는 기술.

원격 사용자나 지점들이 마치 사설 네트워크에 있는 것처럼 안전하게 통신. 

VPN 구현 시 안전한 통신을 보장하기 위해 L2TP, IPSec, SSL/TLS 등 보안 기술들을 사용.

 => L2TP & IPSec 와 함께 많이 사용. (L2TP 로 터널을 형성하고, IPSec이 터널을 암호화해 안전한 통신 보장)

 

 

 

 

 

6. 다음은 Python에 대한 문제이다. 아래 코드를 읽고 알맞는 출력 값을 작성하시오.

 

def fnCalculation(x,y):
    result = 0;
    for i in range(len(x)):
     temp = x[i:i+len(y)] 
     if temp == y:
       result += 1;
    return result
 
a = "abdcabcabca"
p1 = "ab";
p2 = "ca";
 
out = f"ab{fnCalculation(a,p1)}ca{fnCalculation(a,p2)}"
print(out)

 

 

더보기

 

ab3ca3

 

 

 

 

( * 암호화 *)

7. 아래 설명하는 내용을 확인하여 알맞는 알고리즘을 작성하시오.

 

- 대칭키 알고리즘으로 1997년 NIST(미국 국립기술표준원)에서 DES를 대체하기 위해 생성되었다.
- 128비트, 192비트 또는 256비트의 가변 키 크기와 128비트의 고정 블록 크기를 사용한다.
- 높은 안전성과 효율성, 속도 등으로 인해 DES 대신 전 세계적으로 많이 사용되고 있다.

 

더보기

 

AES


 

[ 단방향 암호화 ] 

* 해시 (Hash) : 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장.

* 해시 함수

=> 입력 데이터의 크기와 상관없이 고정된 크기의 결과를 생성. (일정한 크기의 해시값 반환)

=> 단방향성. 해시값을 통해 원래 데이터를 다시 추출하기 어려움. 

=> 동일한 입력 데이터는 항상 동일한 해시를 반환. ( 동일한 원본 데이터는 동일한 다이제스트(Digest)를 가짐 )

 


 

[ 양방향 암호화 ] 

대칭키 (개인키, Private) _ 암호화키 = 복호화키, 속도빠름, 관리하는 키의 수 많음

- Stream 방식 : 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화. (1bit씩 XOR연산)

   => RC4, LFSR, TKIP

- Block 방식 : 한 번에 하나의 데이터 블록을 암호화. (2bit 이상 묶음 연산)

   => SEED, ARIA, DES, 3DES, AES, IDEA

비대칭키 (공개키, Public) _ 암호화키(공개키) <> 복호화키(비밀키), 속도느림, 관리하는 키의 수 적음

   => RSA (Rivest Shamir Adleman) _ Stream방식, ECC 

 


(2022 2회 참고)

 

 

 

 

 

( * 2024년 1회 5번, 패킷교환방식 *)

8. 패킷 교환 방식 중에 연결형과 비연결형에 해당하는 방식을 작성하시오. 

 

① 연결형 교환 방식

② 비연결형 교환 방식

 

더보기

 

1. 가상회선

2. 데이터그램

 


 

* 가상회선 방식 (Virtual Circuit) _ TCP

  • 연결형 교환 방식. 회선교환 방식과 데이터그램 방식의 장점을 결합한 통신 기술.
  • 최초 패킷 전송 시 최적의 경로를 설정하고, 이후 모든 패킷이 동일한 경로를 따라 전송. 
  • 전송한 순서와 도착한 순서가 일치하여 데이터의 일관성 보장.
  • 정해진 시간 안에 다량의 데이터를 연속으로 보낼 때 적합.

 

* 데이터그램 (Datagram) _ UDP

  • 비연결형 교환 방식.
  • 패킷별로 독립적으로 전송되며, 각 패킷은 정해진 경로 없이 헤더에 번호를 붙여 순간마다 최적의 경로를 선택.
  • 전송 순서가 보장되지 않으며, 패킷이 중간에 유실될 가능성도 있음.
  • 짧은 메시지의 일시적인 전송에 적합.

 

 

 

 

 

( * 응집도 *)
9. 아래 내용을 확인하고 보기에서 알맞는 답을 고르시오.

 

실행 순서가 밀접한 관계를 갖는 기능을 모아 모듈로 구성한다.
한 모듈 내부의 한 기능 요소에 의한 출력 자료가 다음 기능 원소의 입력 자료로서 제공되는 형태이다.

 

보기

ㄱ.  기능적(functional)           ㄴ.  우연적(Coincidental)          ㄷ.  통신적(Communication)       ㄹ.  절차적(Procedural)         ㅁ.  시간적(Temporal)           ㅂ.  순차적(sequential)              ㅅ.    논리적(Logical)

 

더보기

 

ㅂ. 순차적 (sequential) 응집도

 


 

* 응집도 (Cohesion)  

우연적 응집도 (Coincidental Cohesion)  모듈 내부 각 구성 요소들이 연관이 없는 경우.

논리적 응집도 (Logical Cohesion)  유사한 성격을 갖거나 특정 형태로 분류되는 처리요소들이 한 모듈에서 처리.

시간적 응집도 (Temporal Cohesion) 특정 시간에 처리되어야 하는 활동을 한 모듈에서 처리.

절차적 응집도 (Procedural Cohesion) 모듈 안의 구성 요소들이 기능을 순차적으로 수행하는 경우.

통신적 응집도 (Communication Cohesion)  동일한 입력과 출력을 사용하여 다른 기능을 수행.

순차적 응집도 (Sequential Cohesion) 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 입력값으로 사용.

기능적 응집도 (Functional Cohesion)  모듈 내부의 모든 기능이 단일 목적을 위해 수행

 

 

 

 

 

( * 디자인패턴 *)

10. 아래는 디자인 패턴에 관한 설명이다. 아래 설명을 읽고 보기에서 알맞는 용어를 작성하시오.

 

- 컬렉션 객체의 내부 구조를 노출하지 않고 순차적으로 접근할 수 있게 하는 패턴이다. 
- 이 패턴은 객체의 내부 표현 방식에 독립적으로 요소에 접근할 수 있도록 해준다
- 반복 프로세스를 캡슐화하여 클라이언트 코드에서는 컬렉션의 구체적인 구현에 종속되지 않도록 한다.

 

보기

생성패턴 구조패턴 행위패턴
Singleton Adapter Iterator
Factory Method Bridge Visitor
Abstract Factory Composite Observer

 

 

더보기

Iterator (반복자)


 

[ 디자인 패턴 (GoF) ]

 

* 생성 패턴 (Creational Pattern)

  - 추상팩토리 (Abstract Factory) : 인터페이스를 통해 여러 관련된 객체들을 그룹으로 생성. 특정 클래스에 의존X.

  - 빌더 (Builder)* : 작게 분리된 인스턴스를 건축하듯이 조립하여 객체를 생성.

                                객체의 생성과 표현방법을 분리 => 동일한 객체 생성에서도 서로 다른 결과.

  - 팩토리 메소드 (Factory MEthod)* : 상위클래스에서 인터페이스만 정의, 하위(서브)클래스에서 인스턴스 생성.

                                                           가상생성자 패턴 (Virtual - Constructor)

  - 프로토타입 (Prototype) : 원본 객체를 복제하는 방법으로 객체 생성.

  - 싱글톤 (Singleton)* : 하나의 객체를 생성하면 어디서든 참조 가능. 동시참조불가. 

                                생성자가 여러번 호출되더라도 실제 생성되는 객체는 하나. (클래스 내 인스턴스가 하나)

 

* 구조 패턴 (Structural Pattern)

  - 어댑터 (Adapter) : 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환.

  - 브리지 (Bridge)* : 구현부에서 추상층을 분리 (기능과 구현을 두 개의 별도 클래스로 구현), 결합도 낮음

  - 프록시 (Proxy)* : 객체 간 인터페이스 역할. 특정 객체에 대한 접근을 제어하거나 기능을 추가.

                                 객체의 대리자를 이용하여 원래 객체의 작업을 대신 처리.

  - 컴포지트 (Composite) : 객체들을 트리 구조로 구성. (복합객체와 단일객체 구분X)

  - 데코레이터 (Decorator) : 객체 간의 결합을 통해 기능을 확장.

  - 퍼싸드 (Facade) :  복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성. Wrapper 객체 필요.

  - 플라이웨이트 (Flyweight) : 인스턴스를 필요할때마다 매번 생성하지 않고 공유해서 사용. (재사용)

                                                공통 속성은 공유, 고유한 속성은 각 객체마다 관리.

 

(싱글톤은 하나의 인스턴스를 전역에서 사용, 플라이웨이트는 인스턴스 내의 공통속성만 공유하며 재사용)

 

* 행위 패턴 (Behavioral Pattern) 

  - 옵저버 (Observer)* : 한 객체의 상태가 변화하면 상속되어 있는 다른 객체들에게 변화된 상태 전달, 일대다관계,

                                     주로 분산시스템 간 이벤트를 생성/발행(Publish)하고 이를 수신(Subscribe)할 때 사용.

   - 방문자 (Visitor)* : 데이터 구조와 처리기능을 분리. 처리기능은 각 클래스를 방문하여 수행. (방문자 객체)

                                  데이터의 구조 수정 없이 새로운 연산 추가 가능.

  - 반복자 (Iterator)* : 접근이 잦은 객체에 대해 동일한 인터페이스 사용. 내부구조 노출 없이 순차적인 접근 가능.

  - 책임연쇄 (Chain of Responsibility) : 요청을 처리하는 객체들이 고리로 묶여있어 해결될때까지 책임 넘어감.

  - 커맨드 (Command) : 요청을 객체의 형태로 캡슐화. 

  - 인터프리터 (Interpreter) : 언어에 문법 표현을 정의.

  - 중재자 (Mediator) : 객체들 간 상호작용을 캡슐화. 객체 사이 의존성을 줄여 결합도 감소.

  - 메멘토 (Memento) : 특정 시점의 객체 내부상태를 객체화. (ctrl + z)

  - 상태 (State) : 객체의 상태를 캡슐화. 이를 참조하여 객체 상태에 따라 동일한 동작을 다르게 처리.

  - 전략 (Strategy) : 동일한 계열의 알고리즘들을 캡슐화.

  - 템플릿 메소드 (Template Method) : 상위클래스에서 골격 정의, 하위클래스에서 세부 처리 구체화.

 

 

 

 

 

( * 라우팅 프로토콜 *)

11. 아래 그림을 바탕으로 RIP을 구성하여 최단 경로 비용을 계산하여 흐름에 맞게 작성하시오.

 

예제

A  → 

 

더보기

A  →  D     C     F  (최소 홉 수)

 


 

* 라우터 : 네트워크 간의 데이터 패킷을 전달하기 위한 장치.

* 라우팅 프로토콜 : 라우터 간 네트워크 정보를 교환하고, 최적의 경로를 통해 데이터 패킷을 전달.

     > 정적 라우팅 (Static Routing) : 관리자가 수동으로 라우터에 경로를 설정. 작은 네트워크&변화가 적은 환경.

     > 동적 라우팅 (Dynamic Routing) : 라우터가 자동으로 경로를 선택하고 업데이트. 대규모 네트워크&복잡한 환경.

 

* 동적 라우팅

  - EGP (Exterior Gateway Protocol, 외부 게이트웨이 프로토콜) : 외부 라우터 상호간 (AS, Autonomous System)

     > BGP (Border Gateway Protocol) : 인터넷의 자율시스템(AS) 간에 라우팅 정보 교환 프로토콜.

 

  - IGP (Interior Gatewqy Protocol, 내부 게이트웨이 프로토콜) : 내부 라우터 간 (AS_자율시스템 내부)

     - Distance Vector (거리백터 프로토콜) : 이웃 라우터와 경로 정보를 공유하며, 거리 기반 최적의 경로 선택.

          > RIP (Routing Information Protocol) : 홉(hop)수로 경로 선택 (최대 15홉), 소규모 네트워크

          > IGRP (Interior Gateway Routing Protocol) : 홉수+대역폭+지연시간+신뢰성 고려하여 경로 선택,

                                                                                    대규모 네트워크, 시스코(Cisco) 개발

 

     - Link-State Vector (링크상태 프로토콜) : 네트워크 전체 지도로 각 링크(연결)상태를 기반으로 최단 경로 선택

          > OSPF (Open Shortest Path First Protocol) : 다익스트라(Dijkstra) 알고리즘, 대규모 네트워크

          > EIGRP (Enhanced Interior Gateway Routing Protocol) : IGRP 개선 버전, 거리백터+링크상태 장점 결합

 

 

 

 

 

( * 프로세스 스케줄링 *)

12. 아래의 표를 확인하여 SRT 스케줄링의 평균 대기시간을 계산하여 작성하시오.

 

프로세스 도착 시간 서비스 시간
A 0 8
B 1 4
C 2 9
D 3 5

 

 

더보기

 

26 / 4 = 6.5

( 평균 대기 시간 = 모든 프로세스의 대기 시간의 총합 / 프로세스 수 )

각 프로세스의 대기 시간

A = 9 

B = 0 

C = 15

D = 2


 

* CPU Scheduling : 운영체제가 CPU를 여러 프로세스에게 어떻게 할당할지 결정하는 과정.

 

* 선점형 스케줄링 (Preemptive Scheduling)

현재 실행 중인 프로세스를 강제로 중단하고, 다른 프로세스에게 CPU 할당.

프로세스가 CPU를 독점하지 못하고, 우선순위가 더 높은 프로세스가 CPU를 할당받을 수 있음.

문맥교환(Context Switch)이 자주 발생할 수 있음 => 오버헤드 증가.

 

 - Round Robin (RR) :  각 프로세스가 동일한 시간 할당량을 가지고 순환.

                                => 시간내에 작업이 끝나지 않으면 대기 큐의 맨뒤로 되돌아감. 대화식 시분할 시스템에 적합.

 - Shortest Remaining Time (SRT) : 남은 실행 시간이 짧은 프로세스가 CPU 할당. ( SJF + RR )

                                => 프로세스의 남은 시간 계산 힘듬. Starving

 - Priority Scheduling (우선순위_선점) : 우선순위가 높은 프로세스가 CPU 할당. 

                                => 현재 실행 작업보다 높은 우선순위를 가진 프로세스가 도착하면  현재 실행 작업 강제중단 

 

 

* 비선점형 스케줄링 (Non-preemptive Scheduling)

한 번 CPU를 할당받은 프로세스가 스스로 작업을 완료하거나, I/O작업으로 CPU를 포기할 때까지 실행.

문맥교환(Context Switch)이 덜 발생하지만, 우선순위가 높은 프로세스가 오래 기다릴 수 있음.

 

 - First In First Out (FIFO) : 먼저 대기 큐에 들어온 프로세스가 CPU 할당. (선입선출, First Come First Served)  

                                               => 간단하지만 대기 시간 증가.

 - Shortest Job First (SJF) : 실행 시간이 가장 짧은 프로세스가 먼저 CPU 할당.

                                               => 평균 대기 시간 감소, 소요시간이 큰 프로세스는 실행X ( Starving )

 - Priority Scheduling (우선순위_비선점형) : 우선순위가 높은 프로세스가 CPU 할당. 

                                               => 현재 실행 작업보다 우선순위가 더 높은 작업이 도착해도 현재 작업 완료까지 대기

 


 

* 기아현상 (Starving)

우선순위 스케줄링(Priority Scheduling)에서 낮은 우선순위의 프로세스는 계속해서 CPU를 할당받지 못하는 현상.

 

* Aging 

기아 현상을 해결하기 위한 방법으로, 대기 시간이 길어진 프로세스의 우선순위를 점진적으로 높혀 CPU 할당.

 

 

 

 

 

13. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

 

#include <stdio.h>
 
int main() {
    int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int* parr[2] = {arr[1], arr[2]};
    printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
    
    return 0;
}

 

더보기

21


                                  (주소값)

arr[0] = { 1, 2, 3 }   //  10 11 12 

arr[1] = { 4, 5, 6 }   //  13 14 15

arr[2] = { 7, 8, 9 }   //  16 17 18

 

parr[0] = { 13, 14, 15

parr[1] = { 16, 17, 18 }

 

parr[1][1]  =>  주소17의 값  => 8  

*(parr[1] + 2)  =>  *( 16 + 2 )  =>  주소18의 값  =>  9

**parr  =>  *( 13 )  =>  주소13의 값  =>  4

 

8 + 9 + 4 = 21

 

 

 

 

14. 다음은 Java 언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

 

class Main {
    public static void main(String[] args) {
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        ODDNumber OE = new ODDNumber();
        System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
    }
}
 
interface Number {
    int sum(int[] a, boolean odd);
}
 
class ODDNumber implements Number {
    public int sum(int[] a, boolean odd) {
        int result = 0;
        for(int i=0; i < a.length; i++){
            if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
                result += a[i];
        }        
        return result;
    }    
}

 

 

더보기

25, 20

 


 

 
if ( (odd && a[i] % 2 != 0||  ( !odd && a[i] % 2 == 0) )
          true && 2의배수X   ||     false && 2의배수O
 
 

OE.sum(a, true)   => result = 1 + 3 + 5 + 7 + 9 = 25

OE.sum(a, false)  => result = 2 + 4 + 6 + 8 = 20

 

 

 

 

 

15. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

 

#include <stdio.h>
#include <string.h>
 
void sumFn(char* d, char* s) {
    int sum = 0;
 
    while (*s) {
        *d = *s;
        d++;
        s++;
    }
    *d = '\0'; 
}
 
int main() {
    char* str1 = "first";
    char str2[50] = "teststring";  
    int result=0;
    sumFn(str2, str1);
 
    for (int i = 0; str2[i] != '\0'; i++) {
        result += i;
    }
    printf("%d", result);
    
    return 0;
}

 

 

더보기

10


sumFn(str2, str1)  =>  str2 = "first"

result = 0 + 1 + 2 + 3 + 4 = 10

 

 

 

 

( * 결합도 *)

16. 아래는 소프트웨어 설계에 대한 내용이다. 내용을 읽고 괄호안에 알맞는 답을 작성하시오.

 

- 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해, 제어를 통신하거나 제어 요소를 전달하는 결합도이다.
- 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다.

(              ) Coupling

 

더보기

제어 or Control


 

* 결합도 (Coupling)

데이터(자료) 결합도 (Data Coupling) 모듈간의 자료(값)을 통해서만 모듈 상호 작용 발생.

스탬프 결합도 (Stamp Coupling) 모듈간의 배열이나 오브젝트, 스트럭처 등이 전달. (참조값)

제어 결합도 (Control Coupling) 값뿐만 아니라 제어요소가 전달 되는 경우.

외부 결합도 (External Coupling) 모듈에서 외부로 선언한 변수를 다른 모듈에서 참조.

공유(공통) 결합도 (Common Coupling) 전역변수를 참조

내부 결합도 (Content Coupling) 다른 모듈 내부에 있는 변수나 기능을 또 다른 모듈에서 사용.

 

* 응집도 (Cohesion)

우연적 응집도 (Coincidental Cohesion)         낮음

논리적 응집도 (Logical Cohesion)

시간적 응집도 (Temporal Cohesion)

절차적 응집도 (Procedural Cohesion)

통신(교환)적 응집도 (Communication Cohesion)

순차적 응집도 (Sequential Cohesion)

기능적 응집도 (Functional Cohesion)             높음

 

 

 

 

 

17. 다음은 Java에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력 값을 작성하시오.

 

class Main {
    public static void main(String[] args) {
        String str = "abacabcd";
        boolean[] seen = new boolean[256];
        System.out.print(calculFn(str, str.length()-1, seen));
    }
 
    public static String calculFn(String str, int index, boolean[] seen) {
        if(index < 0) return "";
        char c = str.charAt(index);
        String result = calculFn(str, index-1, seen);
        if(!seen[c]) {
            seen[c] = true;
            return c + result;
        }
        return result;
    }
}

 

 

더보기

dcba


 

* charAt(index) : 문자열에서 'index'위치에 있는 문자를 반환.

 

 

 

 

18. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력 값을 작성하시오.

 

#include <stdio.h>
 
void swap(int a, int b) {
    int t = a;
    a = b;
    b = t;
}
 
int main() {
    
    int a = 11;
    int b = 19;
    swap(a, b);
    
    switch(a) {
        case 1:
            b += 1;
        case 11:
            b += 2;
        default:
            b += 3;
        break;
    }
    
    printf("%d", a-b);

 

 

더보기

 

-13


 

swap(a, b) 를 실행하면 함수 내부에서 a와 b의 값이 바뀌지만,

main함수 내부의 실제 a, b 의 값에는 영향을 주지 않음**

switch문 결과로 a = 11 , b = 24

a - b = -13

 

 

 

 

19. 다음은 C언어의 구조체에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력 값을 작성하시오.

 

#include <stdio.h>
 
struct node {
    int n1;
    struct node *n2;
};
 
int main() {
 
    struct node a = {10, NULL};
    struct node b = {20, NULL};
    struct node c = {30, NULL};
 
    struct node *head = &a;
    a.n2 = &b;
    b.n2 = &c;
 
    printf("%d\n", head->n2->n1);
 
    return 0;
}

 

 

 

 

 

 

20. 다음은 Java에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력 값을 작성하시오.

 

class Main {
    public static void main(String[] args) {
        String str = "ITISTESTSTRING";
        String[] result = str.split("T");
        System.out.print(result[3]);
    }
}

 

 

더보기

 

S


 

result = { "I", "IS", "ES", "S", "RING" }

result[3] = "S"