현시점 3일 전
아직도 이거 보고 있으면
난..
이번 시험은 50점을 목표로 간다.
2024년 2회 차 기출
1. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
public class Main {
public static void check(int[] x, int[] y) {
if(x==y) System.out.print("O");
else System.out.print("N");
}
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(b, c);
check(a, c);
}
}
틀림) NNN (내가 쓴 답: ONN)
풀이)
if (x==y)는 배열의 내용이 아니라 배열이 저장된 메모리 주소(참조값)을 비교
같은 배열 객체를 가리키는지만 판단.
여긴 다 다른 배열 객체를 가리킴.
그래서 NNN
2. 다음 내용이 설명하는 용어를 쓰시오.
시스템의 성능을 향상시키고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로
통합, 중복, 분리하여 정규화 원칙을 위배하는 행위
맞음) 반정규화
풀이)
3. 다음의 조건을 만족하도록 괄호에 적합한 명령을 넣어 SQL문을 완성하시오.
[테이블]
사원 [사원번호(PK), 이름, 나이, 부서]
부서 [사원번호(PK), 이름, 주소, 나이]
① 신입사원이 들어와서 부서 테이블에 새로운 사람을 추가
INSERT INTO 부서 (사원번호, 이름, 주소, 나이) ( ① ) (240728, '홍길동', '서울', 30);
② 부서 테이블에서 추가한 사원을 검색한 후 사원 테이블에 추가
INSERT INTO 사원 (사원번호, 이름, 나이, 부서)
( ② ) 사원번호, 이름, 나이, ‘영업’ FROM 부서 WHERE 이름 = '홍길동';
③ 전체 사원 테이블 조회
SELECT * ( ③ ) 사원;
④ 사원의 퇴사로 인해 부서에 해당하는 값을 '퇴사'로 변경
UPDATE 사원 ( ④ ) 부서 = '퇴사' WHERE 사원번호 = 240728;
틀림) (1) values (2) select (3) from (4) set
풀이)
INSERT INTO / VALUES
UPDATE / SET
4. 다음 테이블에서 카디널리티(Cardinality)와 디그리(Degree)를 구하시오.
[회원]
ID | 이름 | 거주지 | 신청강의 |
191-SR05 | 백영헌 | 마포구 | E01 |
024-RU09 | 차수인 | 관악구 | S03 |
181-SQ03 | 허채빈 | 서대문구 | E02 |
059-RL08 | 윤지호 | 광진구 | S03 |
029-SX07 | 배서희 | 서대문구 | E02 |
맞음) 카디널리티: 5 디그리: 4
풀이)
카튜가기행
속애열세차
카디널리티: 행이 몇개야
디그리: 열이 몇개야
5. 다음 설명에 해당하는 프로토콜을 쓰시오.
- Network layer에서 IP패킷을 암호화하고 인증하는 등의 보안을 위한 표준이다.
- 기업에서 사설 인터넷망으로 사용할 수 있는 VPN을 구현하는데 사용되는 프로토콜이다.
- AH(Authentication Header)와 ESP(Encapsulating Security Payload)라는 두 가지 보안 프로토콜을 사용한다.
틀림) IPsec
풀이)
6. 모듈에 대한 다음 설명에 해당하는 응집도(Cohesion)를 에서 찾아 쓰시오.
<보기>
㉠ 기능적 응집도 ㉡ 논리적 응집도 ㉢ 교환적 응집도 ㉣ 절차적 응집도
㉤ 시간적 응집도 ㉥ 순차적 응집도 ㉦ 우연적 응집도
실행 순서가 밀접한 관계를 갖는 기능을 모아 모듈로 구성하며, 한 모듈 내부의 한 기능 요소에 의한 출력 자료가 다음 기능 원소의
입력 자료로써 제공되는 형태이다.
맞음) ㅂ
풀이)
이전 자료가 다음 자료에 활용 >> 순차적 응집도
7. 디자인 패턴에 대한 다음 설명에서 알맞은 용어를 에서 찾아 쓰시오.
<보기>
생성 패턴 | 구조 패턴 | 행위 패턴 |
Singleton | Adapter | Iterator |
Factory Method | Bridge | Visitor |
Abstract Factory | Composite | Observer |
- 컬렉션 객체의 내부 구조를 노출하지 않고 순차적으로 접근할 수 있게 하는 패턴이다.
- 객체의 내부 표현 방식에 독립적으로 요소에 접근할 수 있다.
- 반복 프로세스를 캡슐화하여 클라이언트 코드에서는 컬렉션의 구체적인 구현에 종속되지 않게 한다.
- Cursor라고도 한다.
풀이)
패턴은 너무 어렵다..
1. 생성(Creational) : 객체 생성 과정 캡슐화
- 싱글톤(sigleton): 1객체
- 팩토리메서드(Factory Method): 책임 위임
- 추상 팩토리(Abstract Factory): 여러 객체 그룹 생성
- 빌더(Builder): 생성단계 캡슐화
- 프로토 타입(Prototype): 원본 객체 복사
2. 구조(Structural) : 클래스 객체 조합(확장)
- 어댑터(Adapter): 연결
- 데코레이터(Decorator): 소스 변경 X, 기능확장
- 퍼사드(facade): 단순화된 인터페이스 제공
- 프록시(Proxy): 원 객체작업 대신처리/ 대리
- 브릿지(Bridge): 구현부 추상층 분리, 독립적 확장, 결합도 낮춤
- 컴포지트(Composite): 트리, 개별 객체와 복합 객체를 동일
- 플라이웨이트(Flyweight): 공유
3. 행동(Begavioral): 상호작용, 역할분담
- 옵저버(Observer): 갱신, 다른 객체 알림 및 자동 갱신
- 스트래티지(Strategy): 알고리즘 캡슐화
- 커맨드(command): 객체로 캡슐화
- 템플릿 메서드(Template Method): 구조 - 상위 / 구현 - 하위
- 스테이트(State): 객체 상태에 따라 다른 행동 / 다형성
- 메멘토(memento): 기억, 객체 상태 저장 후 복구
- 중재자(Mediator): 객체간 상호작용 조정
- 인터프리터(Interpreter): 해석, 문법 정의 및 구문 해석
- 방문자(Visitor): 객체 구조 및 처리 기능 분리/ 캡슐화 위배
- 책임 연쇄(Chain of Responsibility): 객체간 연결고리 / 연속적
- 이터레이터(Iterator): 순차적 접근 / 반복 캡슐 / cursor
8. 다음 Python으로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
def cnt(str, p):
result = 0
for i in range(len(str)):
sub = str[i:i+len(p)]
if sub == p:
result += 1
return result
str = "abdcabcabca"
p1 = "ca"
p2 = "ab“
print(f'ab{cnt(str, p1)} ca{cnt(str, p2)}')
맞음) ab3 ca3
풀이)
cnt(str, p1) = str에서 ca의 갯수 =3
cnt(str, p2) = str에서 ad의 갯수 =3
ab3 ca3
출력문 잘보기 띄어쓰기, 컴마 등
9. 데이터 교환 방식에 대한 다음 설명에서 괄호(①, ②)에 들어갈 알맞은 용어를 쓰시오.
( ① ) : 연결형 통신에서 주로 사용되는 방식으로, 출발지와 목적지의 전송 경로를 미리 연결하여 논리적으로 고정한 후 통신하는 방식이다.
( ② ) : 비연결형 통신에서 주로 사용되는 방식으로, 사전에 접속 절차를 수행하지 않고 헤더에 출발지에서 목적지까지의 경로 지정을 위한
충분한 정보를 붙여서 개별적으로 전달하는 방식이다.
틀림) (1) 가상회선방식 (2) 데이터그램 방식
풀이)
가연비데
가상회선 = 연결
데이터그램 = 비연결
10. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include
void swap() {
int a = 11;
int b = 19;
int t = a;
a = b;
b = t;
}
int main() {
int a = 11;
int b = 19;
swap();
switch(a) {
case 1:
b += 1;
case 11:
b += 2;
default:
b += 3;
break;
}
printf("%d", a-b);
}
틀림) -13
풀이)
swap 출력문 없고 main 함수에 영향 미치지 않음
a=11이니까 case11부터 break 까지 하면 b=24
11-(24) = -13
11. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include
#include
void func(char *d, char *s) {
int sum = 0;
while (*s) {
*d = *s;
d++;
s++;
}
*d = '';
}
int main() {
char* str1 = "first";
char str2[50] = "teststring";
int result = 0;
func(str2, str1);
for (int i = 0; str2[i] != ''; i++) {
result += i;
}
printf("%d", result);
return 0;
}
맞음) 10
풀이)
str2 저장주소가 * s(str1 저장주소와 동일하게 됨)
str2 = "first"
인덱스 숫자 더함 0 + 1 + 2 + 3 + 4 = 10
12. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
interface Number {
int sum(int[] a, boolean odd);
}
public class Main {
public static void main(String[] args) {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
OENumber OE = new OENumber();
System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
}
}
class OENumber 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
풀이)
interface Number {
int sum(int[] a, boolean odd);
} //boolean true 면 홀수 합, false 면 짝수 합 (odd(홀수))
OE.sum(a, true) → 홀수 합
OE.sum(a, ,false) → 짝수 합
배열 길이 만큼 반복,
1 + 3 + 5 + 7 + 9 = 25
2 + 4 + 6 + 8 = 20
13. 다음 라우터 A에서 라우터 F까지 경로를 설정하기 위해 RIP 방식을 사용한다고 할 때, 라우터가 지나가는 경로를 순서대로 쓰시오.(단, 간선 위의 숫자는 라우터 간의 거리를 의미한다.)
답 : A ➝
맞음) D C F
풀이)
홉 수: 출발지와 목적지 사이에 위치한 중간 경유지의 개수
RIP 최단경로 조건
1) 홉 수가 가장 적어야함
2) 홉 수가 동일하다면 비용이 적어야함
3) 홉 수가 15이상이면 불가능한 경로로 판단
OSPF(Open Shortest Path First)
비용을 이용해 최단 경로를 계산 A D C E F
EIGRP(Enhanced Interior Gateway Routing Protocol)
대역폭이 낮고 지연이 적은 경로 선호, 위의 그림에선 OSPF 와 동일하게 동작 A D C E F
Static Routing 정적 라우팅
관리자가 직접 경로를 설정
결론적으로 RIP 는 홉 수 기준, OSPF, EIGRP, Static Routing은 비용을 고려하여 경로가 선택될 듯.
14. 아래 설명하는 내용을 확인하여 알맞은 알고리즘을 작성하시오.
- 대칭키 알고리즘으로 1997년 NIST(미국 국립기술표준원)에서 DES를 대체하기 위해 생성되었다.
- 128비트, 192비트 또는 256비트의 가변 키 크기와 128비트의 고정 블록 크기를 사용한다.
- 높은 안전성과 효율성, 속도 등으로 인해 DES 대신 전 세계적으로 많이 사용되고 있다.
맞음) AES
풀이)
15. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include
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[3][3] = [{1, 2, 3}, {4, 5, 6}, {7, 8, 9}]
parr[2] = [{4, 5, 6}. {7, 8, 9}]
parr[1][1] = {7, 8, 9} 중 인덱스 1 = 8
*(parr [1]+2) = {7, 8, 9} 중 인덱스 0+2 = 9
**parr = *(parr[0]) = *(arr[1]) = {4, 5, 6} 중 인덱스 0 = 4
8 + 9 + 4 = 21
16. 아래의 표를 확인하여 SRT 스케줄링의 평균 대기시간을 계산하여 작성하시오.
프로세스 | 도착시간 | 버스트(Burst) 시간 |
A | 0 | 8 |
B | 1 | 4 |
C | 2 | 9 |
D | 3 | 5 |
틀림) 6.5
풀이)
SRT (Shortest Remaining Time Scheduling) : 짧은 대기 시간인거 먼저 끝냄
버스트 시간 다 더하고 프로세스 수로 나눔 8 + 4 + 9 + 5 = 26 / 4 = 6.5
원래 계산 법:
A 대기시간 = 9
B 대기시간 = 0
C 대기시간 = 15
D 대기시간 = 2
9 + 0 + 15 + 2 = 26 / 4 = 6.5
실행 완료 되는 순서는 B D A C
17. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
public class Main {
public static String rf(String str, int index, boolean[] seen) {
if(index < 0) return "";
char c = str.charAt(index);
String result = rf(str, index-1, seen);
if(!seen[c]) {
seen[c] = true;
return c + result;
}
return result;
}
public static void main(String[] args) {
String str = "abacabcd";
int length = str.length();
boolean[] seen = new boolean[256];
System.out.print(rf(str, length-1, seen));
}
}
틀림) dcba
풀이)
문자열에서 중복되지 않은 문자만 남기고 순차적으로 탐색해서 뒤에서 부터 출력
rf(재귀)
if(!seen[c]) {
seen[c] = true;
return c + result;
}
return result; // 아직 안 본 문자면 seen[c] = true 로 표시하고 결과에 추가. 이미 본 건 건너뜀.
| rf(str, 7, seen) | ← index 7: 'd'
| rf(str, 6, seen) | ← index 6: 'c'
| rf(str, 5, seen) | ← index 5: 'b'
| rf(str, 4, seen) | ← index 4: 'a'
| rf(str, 3, seen) | ← index 3: 'c'
| rf(str, 2, seen) | ← index 2: 'a'
| rf(str, 1, seen) | ← index 1: 'b'
| rf(str, 0, seen) | ← index 0: 'a'
| rf(str,-1, seen) | ← base case → returns ""
return = c + result // 새로나온 문자를 result 앞에 붙임
index = 0 → c='a' → 처음 나옴 → seen[a]=true → return "a"
index = 1 → c='b' → 처음 나옴 → seen[b]=true → return "b" + "a" = "ba"
index = 2 → c='a' → 이미 나왔음 → return "ba"
index = 3 → c='c' → 처음 나옴 → seen[c]=true → return "c" + "ba" = "cba"
index = 4 → c='a' → 이미 나왔음 → return "cba"
index = 5 → c='b' → 이미 나왔음 → return "cba"
index = 6 → c='c' → 이미 나왔음 → return "cba"
index = 7 → c='d' → 처음 나옴 → seen[d]=true → return "d" + "cba" = **"dcba"**
18. 소프트웨어 설계에 대한 다음 설명에서 괄호에 들어갈 알맞은 용어를 쓰시오.
- 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해, 제어를 통신하거나 제어 요소를 전달하는 결합도이다.
- 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다.
답 : ( ) Coupling
틀림) 제어 결합도(Control)
풀이)
19. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include
struct node {
int n1;
struct node *n2;
};
int main() {
struct node a = {10, 0};
struct node b = {20, 0};
struct node c = {30, 0};
struct node *head = &a;
a.n2 = &b;
b.n2 = &c;
printf("%d", head -> n2 -> n1);
return 0;
}
틀림) 20
풀이)
하나의 노드는 {n1, *n2} 로 이루어져 있음. n1은 정수, *n2는 다음 주소를 가리키는 포인터
struct node *head = &a; // head 는 a 노드를 가리킴
a.n2 = &b; // a의 n2는 b 노드를 가리킴
b.n2 = &c; // b의 n2는 c 노드를 가리킴
printf("%d", head → n2 → n1); // head = a 노드, a노드의 n2 = b 노드, b노드의 n1 =20
20. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
public class Main {
public static void main(String[] args) {
String str = "ITISTESTSTRING";
String[] result = str.split("T");
System.out.print(result[3]);
}
}
맞음) S
풀이)
String[] result = str.split("T"); // 알파벳 T를 기점으로 배열로 나눠
==>> [{I}, {IS}, {ES}, {S}, {RING}]
System.out.print(result[3]); // 3번 인덱스에 있는 값 출력
==>> S
결과
맞음: 9
틀림: 11
어려워용..
'Study 비전공' 카테고리의 다른 글
[비전공자] 정보처리기사 실기 기출 풀이 7 (2024년 1회차) (1) | 2025.04.17 |
---|---|
[비전공자] 정보처리기사 실기 기출 풀이 6 (2023년 3회차) (1) | 2025.04.16 |
[비전공자] 정보처리기사 실기 기출 풀이 5 (2023년 2회차) (0) | 2025.04.15 |
[비전공자] 정보처리기사 실기 기출 풀이 4 (2023년 1회차) (1) | 2025.04.15 |
[비전공자] 정보처리기사 실기 기출 풀이 3 (2022년 3회차) (1) | 2025.04.10 |