01. 다음 공통으로 설명하는 빈칸에 알맞은 용어를 쓰시오.
|
관계해석
* 관계 대수(Relational Algebra)
- 관계 대수는 릴레이션에서 사용자가 원하는 결과를 얻기 위해 연산자를 표현하는 방법으로 결과를 얻기 위한 절차를 표현하기 때문에 절차적 언어라고 한다.
- 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적인 방법
- 관계 대수는 크게 순수 관계 연산자와 일반 집합 연산자로 나뉜다.
구분 | 연산자 | 기호 | 의미 |
순수 관계 연산자 |
Select | σ | 조건에 맞는 튜플을 구하는 수평적 연산 |
Project | π | 속성 리스트로 주어진 속성만 구하는 수직적 연산 | |
Join | ⋈ | 공통 속성을 기준으로 두 릴레이션을 합하여 새로운 릴레이션을 만드는 연산 | |
Division | ÷ | 두 릴레이션 A, B에 대해 B 릴레이션의 모든 조건을 만족하는 튜플들을 릴레이션 A에서 분리해 내어 프로젝션하는 연산 | |
일반 집합 연산자 |
합집합 | ∪ | 두 릴레이션의 튜플의 합집합을 구하는 연산 |
교집합 | ∩ | 두 릴레이션의 튜플의 교집합을 구하는 연산 | |
차집합 | - | 두 릴레이션의 튜플의 차집합을 구하는 연산 | |
교차곱 | × | 두 릴레이션의 튜플들의 교차곱(순서쌍)을 구하는 연산 |
* 관계 해석
- 관계 해석은 릴레이션에서 결과를 얻기 위한 과정을 표현하는 것으로 연산자 없이 정의하는 방법을 이용하는 비절차적 언어이다.
- 튜플 관계 해석과 도메인 관계 해석이 있다.
02. 다음은 블록 암호화 방식에 대한 설명이다. 빈칸에 각각 알맞은 암호화 방식을 쓰시오.
①
|
|
②
|
|
① IDEA , ② Skipjack
* 블록 암호화 방식
- 블록 암호는 메시지의 기밀성 이외에도 메시지 인증이나 데이터 무결성, 심지어는 전자서명에까지도 사용할 수 있는 암호화 방식이다.
- 블록 암호는 의사 난수 발생기나 스트림 암호, 해쉬 함수, MAC 등을 개발할 수 있다.
- 블록 암호 비교
* 블록암호 알고리즘
DES | 64비트 블록, 56비트 키, 16라운드, Feistel 구조 |
3-DES | 2개의 키, 암호화, 복호화, Feistel 구조 |
AES | 128비트 블록, 80비트 키, 32라운드, Feistel 변형구조 |
SKIPJACK | 64비트 블록, 80비트 키, 32라운드, Feistel 변형구조 |
IDEA | 64비트 블록, 128비트 키, 8라운드, Feistel+SPN구조(스위스) |
SEED | 128비트블록, 128비트 키, 16라운드, Feistel 구조(한국) |
ARIA | 128비트블록, 128/192/256비트 키, 12/14/16라운드, SPN 구조(한국) |
LEA | 128비트블록, 128/192/256비트 키, 24/28/32라운드, SPN 구조(한국, 경량) |
CRYPTON | 128비트블록, 0~256비트 키, 12라운드 |
03. 다음 공통으로 설명하는 빈칸에 알맞은 용어를 영문 약어로 쓰시오.
( )는 인터넷과 같이 공개된 통신기반 시설을 사용하여 멀리 떨어진 사무실이나 개인 사용자에게 그들이 속한 조직의 네트워크를 안전하게 접근할 수 있도록 제공해주는 네트워크를 말한다. 한 개의 조직만이 전용할 수 있도록 구입하거나 대여받은 값비싼 시스템과 비견될 수 있다.
( )는 공중망에서 가상의 사설망을 구현하는 기술로 IPsec와 SSL ( )가 대표 기술이다. 보안 소켓 계층기반의 가상 사설망인 SSL ( )은 인터넷으로 내부 시스템 자원을 안전하게 사용할 수 있어 구축이 간편하고 비용이 적게 드는 반면 인터넷 보안 프로토콜을 이용하는 IPsec은 센터와 지점 모두 별도의 하드웨어 장비가 필요하다. |
VPN
* VPN (Virtual Private Network, 가상 사설망)
- 개별의 망을 하나의 망처럼 사용하며, 안전하지 않은 공용 네트워크를 이용하여 사설 네트워크를 구성하는 기술이다.
- 전용선을 이용한 사설 네트워크에 비해 저렴한 비용으로 안전한 망을 구성할 수 있다.
- 공용 네트워크로 전달되는 트래픽은 암호화 및 메시지 인증 코드 등을 사용하여 기밀성과 무결성을 제공한다.
- 인터넷과 같은 공공 네트워크를 통해서 기업의 재택 근무자나 이동 중인 직원이 안전하게 회사 시스템에 접근할 수 있도록 해준다.
* 보안 솔루션
- 방화벽(Firewall) - 네트워크 간에 전송되는 정보를 선별하는 기능을 가진 침입 차단 시스템
- 웹방화벽(Web Firewall) - 웹 기반 공격을 방어할 목적으로 만들어진 웹서버 특화 방화벽
- 침입탐지 시스템(IDS; Intrucsion Detection System)
- 컴퓨터 시스템의 비정상적인 사용, 오용 등을 실시간으로 탐지하는 시스템
- 이상탐지, 오용탐지
- 침입방지 시스템(IPS; Intrusion Prevention System) - 방화벽과 침입탐지 시스템을 결합한 것.
- 데이터유출방지(DLP; Pata Leakage/Loss Privention) - 내부 정보의 유출을 방지하기 위한 보안솔류션
- NAC(Network Access Control) - 네트워크에 접속하는 내부 PC의 MAC주소를 IP관리시스템에 등록한 후 일관된 보안관리 기능을 제공하는 보안 솔루션
- ESM(Enterprise Security Management) - 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합관리하는 보안 솔루션
- SIEM(Security Information&Event Management) - 빅데이터 수준의 데이터를 장시간 심층 분석한 인덱싱 기반
- SOAR(Security Orchestration, Automation and Response) - 보안 오케스트레이션, 자동화 및 대응을 통해 IT 시스템을 보호하는 솔루션
- Sandbox - 응용 프로그램이 가상 환경에서 독립적으로 실행되는 형태
- FDS(Fraud Detection System) - 전자금융거래의 이상 거래를 탐지하고 차단하는 시스템
- Proxy Server - 클라이언트를 대신하여 인터넷상의 다른 서버에 접속하며, 방화벽 및 캐시 기능을 수
04. 다음은 동적 라우팅 프로토콜에 대한 설명이다. 빈칸에 해당하는 프로토콜을 각각 <보기>에서 골라 쓰시오.
자치 시스템(AS: Autonomous System)은 인터넷상에서 관리적 측면에서 한 단체에 속하고 관리되고 제어됨으로써, 동일한 라우팅 정책을 사용하는 네트워크 또는 네트워크 그룹을 말한다. 라우팅 도메인으로도 불리며, 전 세계적으로 유일한 자치 시스템번호, ASN(Autonomous System Number)을 부여받는다. AS 번호에 따라 ( ① )와 ( ② )로 구분한다. 동일한 AS 번호를 사용하는 라우팅 프로토콜을 ( ① ) 이라 하며, 다른 AS 번호가 사용되는 라우팅 프로토콜을 ( ② )라 한다. 한 자치 시스템 내에서의 IP 네트워크는 라우팅 정보를 교환하기 위해 내부 라우팅 프로토콜인 ( ① )을 사용한다. ( ① )의 대표적인 프로토콜로는 RIP과 ( ③ ) 가 있으며, RIP는 경유하는 라우터의 대수(hop의 수량)에 따라 최단 경로를 동적으로 결정하는 거리 벡터(distance Vector) 알고리즘을 사용한다. ( ③ ) 은 링크 상태(Link-State) 라우팅 프로토콜로 IP 패킷에서 프로토콜 번호 89번을 사용하여 라우팅 정보를 전송하여 안정되고 다양한 기능으로 가장 많이 사용되는 ( ① )이다. 타 자치 시스템과의 라우팅 정보 교환을 위해서는 외부 라우팅 프로토콜인 ( ② )를 사용한다. 연구기관이나 국가기관, 대학, 기업 간, 즉 도메인(게이트웨이) 간에 라우팅 정보를 교환한다. ( ② )의 대표적인 프로토콜인 ( ④ )는 자치 시스템간의 라우팅 테이블을 전달하는데 주로 이용이 되며, 초기에 연결될 때에는 전체 경로 테이블의 내용을 교환하고, 이후에는 변화된 정보만을 교환한다. |
① IGP , ② EGP , ③ OSPF , ④ BGP
* EGP (Exteior Gateway Protocol, 외부 게이트웨이 프로토콜)
- 연구기관이나 국가기관, 대학, 기업 간, 즉 도메인(게이트웨이) 간에 라우팅 정보를 교환한다.
- BGP (Border Gateway Protocol)
- 외부 라우팅 프로토콜로서 AS(Autonomous System) 간의 라우팅을 한다.
- 테이블을 전달하는 데 주로 이용한다.
* IGP (Interior Gateway Protocol, 내부 게이트웨이 프로토콜)
- 동일 그룹 내에서 라우팅 정보를 교환한다.
- RIP (Routing Information Protocol)
- 최단 경로 탐색에 Bellman-Ford 알고리즘을 사용하는 거리 벡터 라우팅 프로토콜이다.
- 최적의 경로를 산출하기 위한 정보로서 홉(거릿 값)만을 고려하므로, RIP를 선택한 경로가 최적의 경로가 아닌 경우가 많이 발생할 수 있다.
- 최대 홉 카운트를 15홉 이하로 한정한다.
- 소규모 네트워크 환경에 적합하다.
- OSPF (Open Shortest Path First Protocol)
- 대표적인 링크 상태(Link State) 라우팅 프로토콜로 IP 패킷에서 89번 프로토콜을 사용하여 라우팅 정보를 전송한다.
05. 다음은 개발된 소프트웨어를 당장 사용할 수 있도록 준비되어 있는지 확인하기 위한 단계에서 이루어지는 테스트 종류이다. 빈칸에 각각 알맞은 테스트 명칭을 쓰시오.
①
|
|
②
|
|
① 알파 테스트 , ② 베타 테스트
* 인수 테스트 (Acceptance Test)
- 인수 테스트의 목적은 사용자에게 소프트웨어가 개발되어 사용될 준비가 되었다는 확신을 주기 위한 것이다.
- 검증 검사(Validation Test)는 블랙박스 검사를 이용하며, 알파 검사, 베타 검사 등의 기법을 말한다.
알파 테스트(Alpha Test) | 개발자의 통제 하에 사용자가 개발 환경에서 수행하는 테스트 |
베타 테스트(Beta Test) | 개발된 소프트웨어를 사용자가 실제 운영 환경에서 수행하는 테스트 |
06. 다음 설명에 해당하는 테스트를 <보기>에서 골라 쓰시오.
|
Regression(회귀)
* 애플리케이션 테스트 유형 분류
- 목적에 따른 테스트
- 회복(Recovery) : 고의로 부하를 가하여 실패하도록 유도하고 올바르게 복구되는지 테스트
- 안전(Security) : 보안적인 결함을 점검, 불법적인 침입으로부터 시스템을 보호할 수 있는지 확인
- 강도(Stress) : 과부하 테스트, 과도하게 부하를 가하여도 소프트웨어가 정상적으로 실행하는지 확인
- 성능(Performance) : 응답하는 시간, 처리량, 반응속도 등을 테스트
- 구조(Structure) : 소스코드의 복잡도, 소프트웨어 내부의 논리적인 경로 등을 평가
- 회귀(Regression) : 변경, 수정 코드에 대해 새로운 결함 여부 평가
- 병행(Parallel) : 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 비교
- A/B 테스트 : 기존 서비스 대비 효과 테스트
- 스모크 테스트(Smoke) : 테스트 환경의 테스트
07. 다음 주어진 구조에서 C의 Fan-In 과 Fan-Out을 구하시오.
Fan-In 1, Fan-Out 2
* 소프트웨어 구조에서 사용되는 용어
- 소프트웨어 구조는 소프트웨어의 구성요소인 모듈 간의 관계를 계층적 구성을 나타낸 것이다.
Fan-In | 주어진 한 모듈을 제어하는 상위 모듈 수, 들어오는 개수 |
Fan-Out | 주어진 한 모듈이 제어하는 하위 모듈 수, 나가는 개수 |
Depth | 최상위 모듈에서 주어진 모듈까지의 깊이 |
Width | 같은 등급(Level)의 모듈 수 |
Superordivate | 다른 모듈을 제어하는 모듈 |
Subordinate | 어떤 모듈에 의해 제어되는 모듈 |
08. 빈칸에 들어갈 가장 적합한 용어에 해당하는 기호를 <보기>에서 골라 쓰시오.
( ① )는 TCP/IP 관련 프로토콜 중 ( ② )를 전송을 위한 프로토콜로 인터넷상의 서버와 클라이언트 사이의 멀티미디어를 송수신하기 위한 프로토콜이다. ( ① )은 월드 와이드 웹을 위한 데이터 통신의 기초이다.
( ② )에서 다른 문서 간의 연결을 링크(Link)라고 한다. 링크를 이용하면 하나의 문서를 보다가 내용 중의 특정 부분과 관련된 다른 부분을 쉽게 참조할 수 있다. ( ③ )는 웹 브라우저에 표시될 수 있는 웹 페이지와 기타 정보들을 보여주기 위한 주요 마크업 언어이다. |
① HTTP , ② Hypertext , ③ HTML
- HTTP(HyperText Transfer Protocol) : 인터넷 상의 모든 데이터의 교환을 위해 사용되는 통신 규약으로 HTTP 서버는 80번 포트를 사용한다.
- Hypertext(하이퍼텍스트) : 인터넷 상의 문서나 멀티미디어 등을 노드(Node)와 링크(Link)를 통해 이동할 수 있도록 구조화되어 있는 텍스트이다.
- HTML(Hypertext Markup Language) : 웹 콘텐츠의 의미와 구조를 정의하는 가장 단순한 형태의 마크업 언어이다.
09. 다음 설명에 해당하는 객체지향 설계의 원칙을 <보기>에서 골라 쓰시오.
|
인터페이스 분리 원칙(ISP, Interface Segregation Principle)
* 객체지향 설계원칙(SOLID)
SRP, Single responsibility principle | - 단일 책임 원칙 - 모든 클래스는 단일 목적으로 생성되고, 하나의 책임만 가져야 한다. |
OCP, Open-closed principle | - 개방 폐쇄 원칙 - 확장에는 열려 있고, 수정에는 닫혀 있어야 한다. |
LSP, Liskov substitution principle | - 리스코프 치환 원칙 - 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다. |
ISP, Interfase Segregation Priciple | - 인터페이스 분리 원칙 - 자신이 사용하지 않는 메소드와 의존 관계를 맺으면 안된다. - 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다. |
DIP, Dependency Inversion principle | - 의존성 역전 원칙 - 의존 관계를 맺을 때 자주 변화하는 것보다, 변화가 거의 없는 것에 의존해야 한다. |
10. IP 주소가 192.168.100.132이고, 서브넷 마스크가 255.255.255.192인 경우 ①, ②에 해당하는 값을 쓰시오.
네트워크 주소 : 192.168.100.①
사용 가능한 주소 개수 : ② |
① 128 , ② 62
- 서브네팅(Subnetting) : IP 주소의 낭비를 막기 위해 네트워크를 여러 개의 서브넷으로 분리하는 과정이다.
- 서브넷(Subnet) : IP 주소에서 네트워크 영역을 부분으로 나눈 부분 네트워크이다.
- 서브넷 마스크(Subnet Mask) : IP 주소에서 Network ID와 Host ID를 분리하는 역할을 한다.
서브네팅 | Network ID | Host ID | |
IP Address > 192.168.32.132 | AND | 11000000.10101000.00100000.10000100 | |
Subnet Mask > 255.255.255.191 | 11111111.11111111.11111111.11000000 | ||
네트워크 주소(Network ID) | 11000000.10101000.00100000.10000000 | ||
192.168.32.128 | |||
네트워크 주소와 브로드캐스트 주소를 제외한 주소 개수 | 62 |
- 네트워크 주소(Network ID) : 192.168.32.128
- 브로드캐스트 주소 : 192.168.32.191
- 할당 가능한 서브 네트워크의 수 : 2^2개(4개)
- 할당 가능한 호스트의 수 : 2^6-2개(62개)
11. 다음 <직원> 릴레이션에서 다음 관계대수식을 실행한 결과를 ①~⑤에 쓰시오.
ENO | ENAME | TTL | DEPT |
1000 | 홍길동 | 부장 | 관리 |
1001 | 이길동 | 대리 | 교육 |
1002 | 강길동 | 과장 | 총무 |
1003 | 박길동 | 차장 | 영업 |
<관계 대수식>
π TTL(직원)
|
<결과>
① |
② |
③ |
④ |
⑤ |
① TTL , ② 부장 , ③ 대리 , ④ 차장 , ⑤ 과장
* 관계 대수의 PROJECT( π )
- 속성 리스트로 주어진 속성만 구하는 수직적 연산
- 문법 : π 속성리스트 ( 릴레이션 명)
12. 상품 테이블에서 B 제조사 전체 제품의 단가보다 더 큰 단가를 가진 제품을 모두 출력하는 SQL문을 완성하시오.
제품번호 | 단가 | 제조사 |
100 | 1000 | A |
200 | 1500 | B |
300 | 3000 | C |
400 | 900 | D |
500 | 2000 | B |
600 | 1000 | C |
SELECT * FROM 상품
WHERE 단가 > ( ) ( SELECT 단가 FROM 상품 WHERE 제조사 = 'B' } |
ALL
괄호 안의 SQL문이 1500, 2000 두 개의 행을 가져온다.
ANY : 둘 중 하나만 만족해도 된다. 즉, 3000과 2000을 모두 출력해준다.
ALL : 둘 다 만족해야한다. 즉, 3000만 출력한다.
* 다중 행(Multiple Row) 서브 쿼리 연산자
- 다중 행 서브쿼리는 서브 쿼리에서 반환되는 결과가 여러 행이 반환된다.
- ALL 연산자는 ANY와 SOME과는 달리 서브 쿼리의 모든 결과가 메인 쿼리의 조건식에 참(TRUE)이어야 출력된다.
< ALL | 비교 대상 중 최솟값보다 작다. |
> ALL | 비교 대상 중 최댓값보다 크다. |
- 다중 행 연산자 (Multiple Row Operator)
IN | 메인 쿼리의 비교 조건('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참이다. |
ANY, SOME | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참이다. |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다. |
EXISTS | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참이다. |
13. 다음 릴레이션의 데이터는 다음과 같이 저장되어 있다. SQL문을 수행했을 때 결과를 쓰시오.
IDX | COL1 | COL2 |
1 | 2 | NULL |
2 | 3 | 6 |
3 | 5 | 5 |
4 | 6 | 3 |
5 | NULL | 3 |
SELECT COUNT(COL2)
FROM TABLE WHERE COL1 IN (2, 3) OR COL2 IN (3, 5) |
4
* COUNT 함수와 NULL
- COUNT 함수는 COUNT(*)인 경우에 NULL값도 카운트하지만, COUNT(컬럼명)인 경우 NULL값은 카운트하지 않는다.
14. 다음은 함수종속(Functional Dependency)과 정규화(Normalization)에 대한 설명이다. 설명에 해당하는 용어를 빈칸에 각각 <보기>에서 골라 쓰시오.
이상(Anomaly)과 함께 관계형 데이터베이스에서 고려해야 할 것 중에 하나가 함수종속(Functional Dependency)이다. 함수종속의 종류로는 ( ① ) Functional Dependency, ( ② ) Functional Dependency, ( ③ ) Functional Dependency 등이 있다. '고객번호', '제품번호', '제품명', '주문량'으로 구성된 <고객주문> 테이블이 있다. <고객주문> 테이블에서는 '고객번호'와 '제품번호'가 조합된 (고객번호, 제품번호)가 기본키이고 다음과 같은 함수종속 관계가 존재한다. |
(고객번호, 제품번호) → 주문량 제품번호 → 제품명 |
<고객주문> 테이블에서 '주문량' 속성은 기본키인 '고객번호'와 '제품번호'를 모두 알아야 구분할 수 있다. 이런 경우, '주문량' 속성은 기본키인 '고객번호'와 제품번호'를 모두 알아야 구분할 수 있다. 이런 경우, '주문량' 속성은 기본키에 ( ① ) Functional Dependency 되었다고 한다. 반면, 기본키의 일부인 '제품번호'만 알아도 '제품명'을 알 수 있다. 이와 같은 경우 '제품명'은 기본키에 ( ② ) Functional Dependency 되었다고 한다. ( ② ) Functional Dependency는 릴레이션에서 한 속성이 기본키가 아닌 다른 속성에 종속이 되거나 또는 기본키가 2개 이상의 복합키(합성키)로 구성된 경우, 이 중 일부 속성에 종속이 되는 경우를 말한다. 2NF는 1NF에서 ( ② ) Functional Dependency 로 인한 이상의 문제를 해결하이 위해 릴레이션을 분해한 정규형을 말한다. 2NF의 속성들 간에는 ( ① ) Functional Dependency 관계가 성립하게 된다. 3NF는 ( ③ ) Functional Dependency 관계가 성립하지 않도록 하는 것이다. ( ③ ) Functional Dependency란 간접적인 함수 종속관계를 의미한다. 즉, 예를 들어 속성 A가 속성 B를 결정하고, 속성 B는 속성 C를 결정하는 경우, A →C가 성립한다. 아울러 3NF에서는 결정자이면서 후보키가 아닌 것이 존재함에 따라 이상 현상이 발생할 수도 있다. 결정자이면서 모두 후보키이면, 릴레이션 R은 BCNF에 속한다. |
① Full (완전 함수 종속) , ② Partial (부분 함수 종속) , ③ Transitive (이행적 함수 종속)
* 함수 종속성(Functional Dependency)
- 개체 내에 존재하는 속성 간의 관계를 종속적인 관계로 정리하는 방법이다.
- 데이터 속성들의 의미와 속성 간의 상호관계로부터 도출되는 제약조건이다.
부분 함수 종속 (Partial Functional Dependency) |
릴레이션에서 한 속성이 기본키가 아닌 다른 속성에 종속이 되거나 또는 기본키가 2개 이상 합성키로 구성된 경우 이 중 일부 속성에 종속이 되는 경우 |
완전 함수 종속 (Full Functional Dependency) |
릴레이션에서 한 속성이 오직 기본키에만 종속이 되는 경우 |
이행적 함수 종속 (Transitive Functional Dependency) |
릴레이션에서 A, B, C 세 속성 간의 종속이 A → B, B → C일 때, A → C가 성립이 되는 경우 |
15. 다음 C언어 프로그램의 출력결과를 쓰시오.
#include<stdio.h>
struct st{
int x, y;
};
int main(){
int i;
struct data st[2];
for (i=0; i<2; i++) {
st[i].x = i;
ds[i].y = i+1;
}
printf("%d", st[0].x + st[1].y);
}
2
- 해당 프로그램은 구조체 배열을 선언하고 요소의 값을 저장한 후, 구조체 배열의 요소의 값들을 덧셈하여 출력하는 프로그램이다.
- struct data st[2]; 명령문에 의해 x와 y의 멤버를 갖는 data형을 2개의 요소로 갖는 구조체 배열이 선언된다.
- for문을 실행한 결과 각 요소의 값들은 다음과 같다.
st[0] | st[1] | ||
x | y | x | y |
0 | 1 | 1 | 2 |
16. 다음 C언어 프로그램의 출력결과를 쓰시오.
#include<stdio.h>
int main(){
char *p1 = "2021";
char *p2 = "202107";
int n = func(p1);
int m = func(p2);
printf("%d", n+m);
return 0;
}
int func(char *p){
int cnt = 0;
while(*p != '\0'){
cnt ++;
p ++;
}
return cnt;
}
10
- 해당 프로그램은 두 문자열 상수를 각각 char* 포인터로 참조하여 문자열의 길이를 구하여 덧셈 후, 출력하는 프로그램이다.
- 문자열 상수는 문자열의 마지막에 널문자('\0')를 포함하고 있는 불변의 값이다.
- int func(char* p) 함수는 main()함수에서 func(p1)를 실행하여 문자열 상수 "2021"을 전달받은 후, 문자열을 구성하는 문자가 널문자('\0')가 아닌 경우 cnt++; 명령문을 통해 문자열 내의 문자의 개수(4)를 구한 후 반환한다.
- 같은 방법으로 func(p2)를 실행하여 문자열 상수 "202107"내의 문자의 개수(6)를 구한 후 반환한다.
17. 다음 C언어 프로그램의 출력결과를 쓰시오.
#include<stdio.h>
int main(){
int a[4] = {0, 2, 4, 8};
int b[3];
int *p;
int sum = 0;
for (int i=1; i<4; i++){
p = a+i;
b[i-1] = *p-a[i-1];
sum += b[i-1]+a[i];
}
printf("%d", sum);
return 0;
}
22
- 해당 프로그램은 1차원 배열 a의 요소를 포인터 연산자를 통해 접근하여 1차원 배열 b의 요소의 값을 저장하는 반복문을 다음과 같이 수행하며 배열 요소 값을 누적한 변수 sum의 값을 최종 출력한다.
- 반복문 내의 p = a + i; 명령문의 배열명 a는 배열의 첫 요소의 주소이므로 변수 i가 1에서 3까지 1씩 증가하며 배열 요소의 주소를 이동시킨 곳을 포인터 변수 p가 가르치게 된다. 다음 문장에서 포인터 연산자 *를 통해 *p의 결과 배열 a의 요소의 값을 참조하게 된다.
i | b[i-1] = a[i] - a[i-1]; | sum : 0 | sum += a[i] + b[i-1]; | ||||
1 | b[0] = 2 - 0; | b | 0 | 1 | 2 | 4 | sum = sum + a[1] + b[1-1]; |
2 | sum = 0 + 2 + 2; | ||||||
2 | b[1] = 4 - 2; | b | 0 | 1 | 2 | 10 | sum = sum + a[2] + b[2-1]; |
2 | 2 | sum = 4 + 4 + 2; | |||||
3 | b[2] = 8 - 4; | b | 0 | 1 | 2 | 22 | sum = sum + a[3] + b[3-1]; |
2 | 2 | 4 | sum = 10 + 8 + 4; | ||||
최종 출력 printf("%d", sum); | 결과 : 22 |
18. 다음 JAVA 프로그램의 출력결과를 쓰시오.
public static void main(String[] args){
int i = 3, k = 1;
switch(i){
case 0: k++;
case 1: k += 3;
case 2: k -= 10;
case 3: k = 0;
case 4: k += 3;
case 5: k -= 10;
default: k--;
}
System.out.println(k);
}
-8
- 해당 프로그램은 switch~case문을 실행한 결과를 출력하는 프로그램이다.
- 선택 제어구조의 명령문인 switch~case문에서는 switch(정수값) 명령문의 정수값에 해당하는 블록 내의 case문으로 분기된다. 문제의 프로그램의 정수형 변수 i의 값이 3이므로 레이블 case 3: 위치로 실행 분기가 이루어진다.
- switch~case 블록 내에 break; 명령문이 존재하면, switch~case 블록을 벗어난다. 위 프로그램에서는 break; 명령문이 존재하지 않으므로 레이블 case 3: 이후의 명령어를 차례대로 실행한다.
19. 다음 JAVA 프로그램의 출력결과를 쓰시오.
class AAA{
int a;
AAA (int a){
this.a = a;
}
int func(){
int b = 1;
for (int i=1; i<a; i++)
b = a*i + b;
return a + b;
}
}
public class Main{
public static void main(String[] args){
AAA obj = new AAA(3);
obj.a = 5;
int b = obj.func();
System.out.println(obj.a + b);
}
}
61
- 해당 프로그램은 매개변수를 갖는 생성자를 호출하는 객체를 생성 후, 객체의 메소드를 호출한 결과를 반영하여 객체의 필드 값과 덧셈을 수행 후, 출력한다.
- 프로그램이 실행되면, main() 메소드의 AAA obj = new AAA(3); 명령문에 의해 객체가 생성되고 매개변수 3이 생성자를 자동으로 호출한다. 매개변수를 갖는 생성자 AAA(int a)가 호출되어 전달받은 3이 객체의 필드 a에 저장된다. 생성된 객체는 main() 메소드의 AAA obj에 의해 참조변수 obj로 참조된다.
- obj.a = 5; 명령문으로 3이었던 필드 a의 값이 다시 5로 저장된다. int b = obj.func(); 명령문으로 메소드 obj.func()가 호출되어 다음과 같이 반복문을 수행한다.
- 초기값 : a=5, b=1
- i=1일 때 : b = 5*1 +1 = 6
- i=2일 때 : b = 5*2 + 6 = 16
- i=3일 때 : b = 5*3 + 16 = 31
- i=4일 때 : b = 5*4 + 31 = 51
- return a+b = 5 + 51 = 56
- obj.a + b = 5 + 56 = 61
20. 다음 파이썬 코드에서 출력되는 결과를 작성하시오.
x = "REMEMBER NOVEMBER"
y = x[:3] + x[12:16]
z = "R AND %s" % "STR"
print(y + z)
REMEMBER AND STR
- 문자열 슬라이싱(String Slicing)과 문자열 포맷팅(String Formatting)
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
R | E | M | E | M | B | E | R | N | O | V | E | M | B | E | R |
- Python의 문자열 객체 y는 문자열 객체 x의 슬라이싱을 실행 후 + 연산자로 연결한 결과이다. 즉, x[:3]은 인덱스 0에서부터 인덱스 (3-1)까지의 문자열을 추출하여 'REM'을, x[12:16]은 인덱스 12에서 (16-1)까지의 문자열을 추출하여 'EMBE'을 연결한 결과가 객체 y의 "REMEMBE" 이다.
y | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
R | E | M | E | M | B | E |
- 객체 z의 경우 문장려 내에 % 기호 다음에 출력 포맷의 서식문자 의미하는 's'를 붙이며 문자열을 의미하는 서식(%s)으로 해당 위치에 'STR' 문자열이 포맷팅되어 "R AND STR"이다.
z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
R | A | N | D | S | T | R |
- 최종 출력 결과는 문자열 객체 y와 문자열 객체 z가 연결되어 "REMEMBER AND STR"이 출력된다.
해설은 유투브 흥달쌤 강의와, 이기적 실기 기본서를 참고하였습니다 :)
https://youtu.be/_iU2sXZYcxk?si=LINC2jKbQQByQcGU
https://youtu.be/6EAwP8tk8Co?si=Ut0PcAhSHh4WD70j
728x90
반응형
'정보처리기사' 카테고리의 다른 글
[정보처리기사 실기 기출] 2023년 1회 (6) | 2024.10.15 |
---|---|
[정보처리기사 실기 기출] 2022년 3회 (16) | 2024.10.14 |
[정보처리기사 실기 기출] 2022년 1회 (17) | 2024.10.11 |
[정보처리기사 실기 기출] 2021년 3회 (3) | 2024.10.11 |
[정보처리기사 실기 기출] 2021년 2회 (10) | 2024.10.08 |