안녕하세요. 2024년 1회 정보처리기사 실기 기출문제를 정리해보았습니다.
나름대로 공부를 하면서 이해하기 쉽게 해설을 달아 놓았습니다.
해당 복원된 기출문제가 많은 분들에게 도움이 되었으면 좋겠습니다.
문제 1. [Java] 싱글톤 패턴 출력 값
다음 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());
}
}
문제 2. [C] 비트 시프트 연산 출력 값
다음 C언어 코드에서 알맞는 출력 값을 작성하시오.
#include
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);
}
문제 3. [응집도] 응집도가 높은 순서로 나열
다음 보기에서 응집도가 높은 순으로 나열하시오.
보기: ㄱ. 기능, ㄴ. 교환, ㄷ. 우연, ㄹ. 시간
문제 4. [C] 문자열 reverse 후 홀수 인덱스 출력
다음 C언어 코드에서 알맞은 출력 값을 작성하시오.
#include
#include
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;
}
문제 5. [네트워크] 할당 가능한 IP 작성
아래 그림의 네트워크에서 라우터를 통한 할당 가능한 2번, 4번, 5번의 IP를 작성하시오.
(해설 예시)
192.168.35.3/24 → 네트워크 주소: 192.168.35.0, 브로드캐스트: 192.168.35.255
129.200.10.16/22 → 네트워크 주소: 129.200.8.0, 브로드캐스트: 129.200.11.255
192.168.36.24/24 → 네트워크 주소: 192.168.36.0, 브로드캐스트: 192.168.36.255
문제 6. [정규형] 정규형 판별
아래 표에 나타난 정규형을 작성하시오.
고객아이디 강좌명 강사번호
---------------------------------
apple 영어회화 P001
banana 기초토익 P002
carrot 영어회화 P001
carrot 기초토익 P004
orange 영어회화 P003
orange 기초토익 P004
문제 7. [네트워크] 링크 상태 라우팅 프로토콜
아래 내용의 네트워크 용어를 영문 약자로 작성하시오.
1) 대표적인 링크 상태 라우팅 프로토콜
2) 단일 자율 시스템 내에서 라우팅 정보를 배포하는 내부 게이트웨이 프로토콜
3) 최단 경로를 구축하며 Dijkstra 알고리즘 사용
문제 8. [SQL] 조인 종류 구분
아래 각 설명에 대한 답을 작성하시오.
(1) 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환
(2) 조건이 ‘=’ 등호로 일치하는 결과 반환
(3) (2)의 결과에서 중복된 속성을 제거하여 반환
문제 9. [운영체제] 페이지 부재 횟수
할당된 프레임의 수가 3개일 때, 아래 페이지 참조 순서에서 LRU와 LFU 알고리즘의 페이지 부재 횟수를 작성하시오.
페이지 참조 순서 : 1, 2, 3, 1, 2, 4, 1, 2, 5, 7
문제 10. [Java] 실행 순서
다음 Java 코드를 보고 실행 순서를 중복 번호 없이 작성하시오.
class Parent{
int x, y;
Parent(int x, int y) { //1
this.x = x;
this.y = y;
}
int getT() { //2
return x * y;
}
}
class Child extends Parent {
int x;
Child(int x) { //3
super(x+1, x);
this.x = x;
}
int getT(int n) { //4
return super.getT() + n;
}
}
class Main {
public static void main(String[] args) { //5
Parent parent = new Child(3); //6
System.out.println(parent.getT()); //7
}
}
문제 11. [C] BankAcc 구조체 출력 값
다음 C언어 코드의 알맞은 출력 값을 작성하시오.
#include
#include
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;
}
문제 12. [Python] 문자열 조작 출력 값
다음 파이썬 코드에 대한 알맞은 출력 값을 작성하시오.
a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"]
str = "S"
for i in a:
str = str + i[1]
print(str)
문제 13. [SQL] 서브쿼리 결과
아래 보기의 SQL 문장과 테이블을 참고하여 출력 값을 표로 작성하시오.
select
B
from
R1
where
C IN (select C from R2 where D = "K")
테이블 (예시)
A | B | C |
---|---|---|
1 | a | x |
2 | b | x |
1 | c | w |
3 | d | w |
C | D | E |
---|---|---|
x | k | 3 |
y | k | 3 |
z | s | 2 |
문제 14. [테스트 관리] 커버리지 용어
아래 애플리케이션 테스트 관리 내용을 보고 보기에서 알맞은 답을 작성하시오.
1) 모든 분기 조건의 조합 대신 중요한 조합을 찾음
2) 전체 결과에 영향을 주는 조건만 테스트
3) 각 파라미터가 최종 결과에 한 번 이상 영향
보기: ㄱ. 구문 커버리지, ㄴ. 결정 커버리지, ㄷ. 조건 커버리지, ㄹ. 변경 조건/결정 커버리지, ㅁ. 다중 조건 커버리지, ㅂ. 경로 커버리지, ㅅ. 조건/결정 커버리지
문제 15. [보안] 악성 프로그램 용어
아래 내용을 보고 보기에서 알맞은 용어를 골라 작성하시오.
- 공격자의 존재를 숨기며 시스템에 무제한 접근 권한 부여
- 펌웨어, 가상화 계층 등에서 작동, 안티바이러스 탐지를 우회
보기: ㄱ. Worm, ㄴ. Trojan horse, ㄷ. Backdoor, ㄹ. Virus, ㅁ. Ransomware, ㅂ. Spyware, ㅅ. Rootkit
문제 16. [Java] 오버라이딩 출력 값
다음 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();
}
}
문제 17. [보안] 지속 침투 공격 용어
아래 설명을 보고 보기에서 알맞은 용어를 작성하시오.
- 명확한 표적을 정하여 지속적으로 정보 수집 후 공격
- 내부 직원 이용 단말 대상으로 공격
- Zero-day 취약점, 악성코드 등 다양한 공격 기법 사용
- 침투, 검색, 수집, 유출 단계로 실행
문제 18. [SQL] 조건 결합 COUNT()
아래 SQL 코드와 테이블을 참고하여 결과 값을 작성하시오.
| EMPNO | SAL |
|-------|------|
| 100 | 1000 |
| 200 | 3000 |
| 300 | 1500 |
SELECT COUNT(*)
FROM TABLE
WHERE EMPNO > 100
AND SAL ≥ 3000 OR EMPNO = 200
문제 19. [C] ctype.h를 이용한 출력 값
다음 C언어 코드의 알맞은 출력 값을 작성하시오.
#include
#include
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
result[i] = p[i];
}
result[i] = '\0';
printf("%s\n", result);
return 0;
}
문제 20. [디자인 패턴] 추상 팩토리
아래 내용을 보고 알맞은 용어를 작성하시오.
구체적인 클래스에 의존하지 않고 관련 객체들을 묶어 생성하는 인터페이스를 제공하며, kit라고도 불립니다.