/ 는 소수점까지 나오는 나눗셈
//는 강제로 (int) 시키기 때문에 뒷자리 다 버림
즉 3까지 돌린다.
0,1,2
인덱스에 -가 들어가면 뒤에서부터 세는 것
-1은 맨 뒤의 요소
0을 대입해보면
lst[0], lst[-1] = lst[-1],lst[0]
1을 대입해보면
lst[1], lst[-2] = lst[-2], lst[1]
즉 리스트를 반대로 바꿔버리는 문법임
이 이후 결과는 6, 5, 4, 3, 2, 1이 됨
마지막 슬라이싱 문법
[시작지점, 끝 지점, 간격] 시작 지점부터 끝 지점까지 해당 간격을 기준으로 뽑아서 리스트를 만듦
[::2]는 처음부터 끝까지 2 간격으로 리스트를 뽑아라
즉, 6,4,2가 나옴
[1::2]는 첫 번째부터 끝까지 2 간격으로 리스트를 뽑아라
즉, 5,3,1이 나옴
이 둘을 빼면 3 즉, 정답은 3이다.
✅ 페이지 교체 알고리즘이란?
- 프로세스가 페이지를 요청할 때, 메모리에 공간이 부족하면 기존 페이지를 교체해야 함.
- 이때 어떤 페이지를 버릴지 정하는 기준이 페이지 교체 알고리즘이야.
💡 자주 나오는 대표 알고리즘 5가지
1. FIFO (First-In First-Out)
"가장 먼저 들어온 페이지부터 내보낸다."
- 큐(Queue) 방식.
- 가장 오래된 페이지를 제거.
- 구현 쉬움. 성능은 상황에 따라 나쁠 수 있음.
예시
2. LRU (Least Recently Used)
"가장 오래 사용되지 않은 페이지를 내보낸다."
- 최근에 사용한 페이지는 유지하고, 한참 안 쓰인 것을 제거.
- 시간 기록이 필요해서 구현은 조금 복잡함.
예시
3. OPT (Optimal / 최적 교체)
"앞으로 가장 오랫동안 사용되지 않을 페이지를 제거한다."
- 이론상 가장 적은 page fault를 가짐.
- 미래의 참조를 알아야 하므로 실제 시스템에서는 사용 불가, 시험용 이론.
예시
4. LFU (Least Frequently Used)
"가장 적게 사용된 페이지를 제거한다."
- 사용 횟수(count)를 세서 가장 덜 쓰인 페이지 제거.
- 사용 횟수 저장 필요 → 구현 복잡.
특징
- 자주 쓰는 페이지는 오래 유지됨
- 근데 사용 빈도가 같을 땐 처리 기준이 애매할 수 있음
5. Second Chance (Clock 알고리즘)
FIFO에서 개선된 방식, 한 번의 기회를 더 줌.
- 각 페이지에 참조 비트를 둠 (0 또는 1).
- 제거 전에 이 비트가 1이면 0으로 바꾸고 기회 한 번 더 주고 넘어감.
- 비트가 0이면 진짜 제거.
시계방향으로 돌면서 체크하는 모습 때문에 "Clock 알고리즘"이라고도 함.
5. 다음은 네트워크 취약점에 대한 문제이다. 아래 내용을 보고 알맞는 용어를 작성하시오.
- IP나 ICMP의 특성을 악용하여 엄청난 양의 데이터를 한 사이트에 집중적으로 보냄으로써 네트워크의 일부를 불능 상태로 만드는 공격이다.
- 여러 호스트가 특정 대상에게 다량의 ICMP Echo Reply 를 보내게 하여 서비스거부(DoS)를 유발시키는 보안공격이다.
- 공격 대상 호스트는 다량으로 유입되는 패킷으로 인해 서비스 불능 상태에 빠진다.
정답: 스머프 공격
icmp flooding이라 생각했지만, 브로드 캐스트 이후 reply를 통해 마비시키는 공격이므로 스머프 공격이 맞음
6. 다음은 GoF 디자인 패턴과 관련된 문제이다. 괄호안에 알맞는 용어를 작성하시오.
( ) 패턴은 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다.
( ) 패턴은 객체들 간의 통신 방법을 정의하고 알고리즘을 캡슐화하여 객체 간의 결합도를 낮춘다.
( ) 패턴은 Chain of Responsibility나 Command 또는 Observer 패턴이 있다.
🔍 GoF 디자인 패턴의 3가지 분류
생성(Creational) | 객체를 어떻게 만들지에 대한 패턴. (예: Singleton, Factory) |
구조(Structural) | 클래스나 객체를 어떻게 조합할지에 대한 패턴. (예: Adapter, Composite) |
행위(Behavioral) | 객체들 사이의 상호작용 방식에 대한 패턴. (예: Observer, Strategy, Command 등) |
c언어에서 함수가 다시 호출되어도 static은 다시 0값이 대입되지 않음
그냥 처음 변수 선언 이후 값을 계속 가져감
정답 20
1. 개체 무결성:
- 각 릴레이션의 기본키를 구성하는 속성은 널(NULL) 값이나 중복된 값을 가질 수 없습니다.
2. 참조 무결성
- 외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 합니다.
3. 도메인 무결성
- 각 속성들의 값은 정의된 도메인에 속한 값이어야 합니다.
4. 고유 무결성
- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 각 튜플이 가지는 속성 값들은 고유한 값을 가져야 합니다.
5. NULL 무결성
- 릴레이션의 특정 속성 값은 NULL 될 수 없습니다.
6. 키 무결성
- 각 릴레이션은 최소한 한 개 이상의 키를 가져야 하며, 키는 튜플을 식별할 수 있는 값이어야 합니다.
13. 다음은 테스트 커버리지에 대한 문제이다. 아래 내용에 알맞는 답을 보기에서 골라 작성하시오.
1. 테스트를 통해 프로그램의 모든 문장을 최소한 한 번씩 실행했는지를 측정
2. 프로그램 내의 모든 분기(조건문)의 각 분기를 최소한 한 번씩 실행했는지를 측정
3. 복합 조건 내의 각 개별 조건이 참과 거짓으로 평가되는 경우를 모두 테스트했는지를 측정
🏷️ 테스트 기법에 따른 분류
📘 화이트박스 테스트 : 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트
- 구문 커버리지 : 모든 명령문을 적어도 한 번 수행
- 결정 커버리지 : 결정 포인트 내의 전체 조건식이 적어도 한 번은 참과 거짓의 결과를 수행
- 조건 커버리지 : 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과를 수행
- 조건/결정 커버리지 : 전체 조건식뿐만 아니라 개별 조건식도 참과 거짓의 결과를 수행
- 변경 조건/결정 커버리지 : 개별 조건식이 다른 개별 조건식에 영향을 받지않고 전체 조건식에 독립적으로 영향을 주도록 향상시킨 커버리지
- 다중 조건 커버리지 : 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지
- 경로 커버리지 : 수행 가능한 모든 경로를 테스트하는 커버리지
- 제어 흐름 테스트 : 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트
- 데이터 흐름 테스트 : 제어 흐름 그래프에 데이터 사용현황을 추가한 그래프 테스트
18. 다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class ExceptionHandling {
public static void main(String[] args) {
int sum = 0;
try {
func();
} catch (NullPointerException e) {
sum = sum + 1;
} catch (Exception e) {
sum = sum + 10;
} finally {
sum = sum + 100;
}
System.out.print(sum);
}
static void func() throws Exception {
throw new NullPointerException();
}
}
|
throws exception에서 niullpointerexception을 구현체로 받아
nullpoionterException이 throw됨
결론, 정답 101
19. 다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
class Main {
public static class Collection<T>{
T value;
public Collection(T t){
value = t;
}
public void print(){
new Printer().print(value);
}
class Printer{
void print(Integer a){
System.out.print("A" + a);
}
void print(Object a){
System.out.print("B" + a);
}
void print(Number a){
System.out.print("C" + a);
}
}
}
public static void main(String[] args) {
new Collection<>(0).print();
}
}
|
T가 값을 받으면 Integer가 되는 것이 맞다.
그러나 메서드 오버로딩에서 static 클래스는 컴파일 시점에 결정된 객체 타입을 기준으로 오버로딩을 진행함
즉, 컴파일 시 자료형이 Object이기 때문에, B0이 정답이다.
3. 다음은 SQL에 관한 문제이다. 아래 SQL 구문의 빈칸을 작성하시오.
테이블
사원 [사원번호(PK), 이름, 나이, 부서]
부서 [사원번호(PK), 이름, 주소, 나이]
신입 사원이 들어와서 사원 테이블에 추가
INSERT INTO 사원 (사원번호, 이름, 주소, 부서) [ ① ] (32431, '정실기', '서울', '영업');
위에 신입사원을 검색하면서 부서 테이블에 추가
INSERT INTO 부서 (사원번호, 이름, 나이, 부서)
[ ② ] 사원번호, 이름, 나이, 23 FROM 사원 WHERE 이름 = '정실기';
전체 사원 테이블 조회
SELECT * [ ③ ] 사원;
퇴사로 인해 부서에 해당하는 값을 '퇴사'로 변경
UPDATE 사원 [ ④ ] 부서 = '퇴사' WHERE 사원번호 = 32431;
1: values
2: select
3. from
4. set
5. 다음은 프로토콜에 대한 내용이다. 아래 내용을 읽고 알맞는 답을 작성하시오.
- Network layer에서 IP패킷을 암호화하고 인증하는 등의 보안을 위한 표준이다.
- 기업에서 사설 인터넷망으로 사용할 수 있는 VPN을 구현하는데 사용되는 프로토콜이다.
- AH(Authentication Header)와 ESP(Encapsulating Security Payload)라는 두 가지 보안 프로토콜을 사용한다.
✅ 핵심 비교표: SSL vs TLS vs HTTPS vs IPSec
계층 | 전송 계층 (TCP 위) | 전송 계층 (TCP 위) | 응용 계층 (HTTP + SSL/TLS) | 네트워크 계층 (IP 수준) |
역할 | 데이터 암호화/무결성/인증 | TLS의 이전 버전 | 웹 보안 프로토콜 (HTTPS = HTTP over TLS) | IP 패킷 자체를 암호화 및 인증 |
사용처 | HTTPS, 이메일, FTP 등 | SSL 대체 (요즘은 거의 TLS) | 웹사이트 보안 접속 | VPN, 사설망, 터널링 |
주요 구성요소 | 공개키/대칭키, 인증서 등 | 공개키/대칭키, 인증서 등 | TLS(또는 SSL) + HTTP | AH, ESP (두 가지 보안 프로토콜) |
암호화 단위 | 응용 계층 데이터 | 응용 계층 데이터 | 웹 페이지 요청/응답 | IP 패킷 전체 또는 페이로드 |
현황 | 사용 안 함 (구버전) | 표준으로 사용 중 | 웹 보안의 표준 | 네트워크 보안에 사용 |
6. 다음은 Python에 대한 문제이다. 아래 코드를 읽고 알맞는 출력 값을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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)
|
f"" 문법
f 뒤 문자열에 들어오는 {} 내부에 변수명이나 함수를 사용하면 그대로 사용된다.
즉 f"ab{함수 결과}ca{함수 결과} 해서
ab3ca3이 정답으로 나오게 된다.
8. 패킷 교환 방식 중에 연결형과 비연결형에 해당하는 방식을 작성하시오.
① 연결형 교환 방식
② 비연결형 교환 방식
이거 정답이 tcp, udp가 아니라는 것이 놀랍다
정답: 가상회선, 데이터그램
9. 아래 내용을 확인하고 보기에서 알맞는 답을 고르시오.
실행 순서가 밀접한 관계를 갖는 기능을 모아 모듈로 구성한다.
한 모듈 내부의 한 기능 요소에 의한 출력 자료가 다음 기능 원소의 입력 자료로서 제공되는 형태이다.
보기
ㄱ. 기능적(functional) ㄴ. 우연적(Coincidental) ㄷ. 통신적(Communication) ㄹ. 절차적(Procedural) ㅁ. 시간적(Temporal) ㅂ. 순차적(sequential) ㅅ. 논리적(Logical)
모듈의 응집도를 묻는 문제다.
🧠 7가지 응집도 종류 (약한 것 → 강한 것)
1️⃣ | 우연적(Coincidental) | 관련 없는 기능을 그냥 몰아넣음 | 로또처럼 막 넣은 유틸 함수 |
2️⃣ | 논리적(Logical) | 비슷한 성격의 기능을 하나의 모듈에서 조건으로 분기 | 메뉴 선택 후 분기 처리 |
3️⃣ | 시간적(Temporal) | 실행 시점이 같다고 묶음 (초기화 등) | 시작할 때 다 같이 실행 |
4️⃣ | 절차적(Procedural) | 실행 순서가 중요해서 묶음 | "A 후에 B"처럼 순서만 있음 |
5️⃣ | 통신적(교환적) | 같은 데이터를 사용하기에 묶음 | 같은 구조체나 파일 접근 |
6️⃣ | 순차적(Sequential) | 출력이 다음 기능의 입력이 됨 | 문제에서 말한 것! |
7️⃣ | 기능적(Functional) | 하나의 명확한 목적을 위한 것만 묶음 | 진짜 이상적인 코드 |
① 우연적 응집도 (Coincidental Cohesion)
관련 없는 기능들이 우연히 하나의 모듈에 뭉쳐있는 상태 (최악)
예시:
def utility_module():
print("오늘 날짜 출력")
print("파일 열기")
print("네트워크 연결")
print("계산기")
- 기능들이 서로 전혀 관련 없음 ❌
② 논리적 응집도 (Logical Cohesion)
비슷한 카테고리의 일을 조건문으로 분기 처리하는 경우
예시:
def handle_input(input_type, value):
if input_type == "keyboard":
print("키보드 입력 처리")
elif input_type == "mouse":
print("마우스 클릭 처리")
- 논리적으로 입력 관련이지만, 내부 로직은 서로 독립
③ 시간적 응집도 (Temporal Cohesion)
같은 시점에 수행된다고 묶어 놓은 기능들 (초기화, 종료 등)
예시:
def init_system():
init_ui()
load_config()
connect_db()
- 시스템 시작할 때 다 같이 호출되지만, 역할은 제각각
④ 절차적 응집도 (Procedural Cohesion)
순서상 이어져야만 하는 기능들을 모아둔 경우
예시:
def process_data():
read_input()
validate_data()
store_data()
- 흐름상 절차는 있지만, 각 단계는 별도로도 가능함
⑤ 통신적 응집도 (Communicational Cohesion)
교환적이랑 똑같음
같은 데이터를 사용하는 기능을 묶은 경우
예시:
def user_operations(user):
update_user_profile(user)
log_user_activity(user)
- user라는 공통 데이터를 공유
⑥ 순차적 응집도 (Sequential Cohesion)
한 기능의 출력이 다음 기능의 입력이 되는 경우
예시:
def image_pipeline(image):
resized = resize(image)
filtered = apply_filter(resized)
save(filtered)
- 출력 → 입력 순으로 이어짐 ✔️
⑦ 기능적 응집도 (Functional Cohesion) ✅ (최고 단계)
모듈이 하나의 명확한 기능만 수행
예시:
def calculate_total_price(items):
return sum(item.price for item in items)
- "총액 계산"이라는 한 가지 목적에 딱 집중됨
RIP 프로토콜은 최단 홉수를 기반으로 최단 경로를 결정한다
따라서 정답은 A->D->C->F
OSPF는 비용을 기반으로 최단 경로를 결정한다.
12. 아래의 표를 확인하여 SRT 스케줄링의 평균 대기시간을 계산하여 작성하시오.
프로세스 | 도착 시간 | 서비스 시간 |
A | 0 | 8 |
B | 1 | 4 |
C | 2 | 9 |
D | 3 | 5 |
비선점 스케쥴링
FCFS = first come first served
SJF = Shortest Job First Scheduling
선점 스케쥴링
SRT = Shortest Remaining Time
RR = round robin
정답: 평균은 6.5다
16. 아래는 소프트웨어 설계에 대한 내용이다. 내용을 읽고 괄호안에 알맞는 답을 작성하시오.
- 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해, 제어를 통신하거나 제어 요소를 전달하는 결합도이다.
- 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다.
( ) Coupling
💡 결합도의 종류와 수준 정리 (강한 → 약한 결합)
① 내용 결합 (Content) | 한 모듈이 다른 모듈 내부를 직접 접근 (최악) |
② 공통 결합 (Common) | 전역 변수 공유 |
③ 외부 결합 (External) | 외부 인터페이스 공유 |
④ 제어 결합 (Control) | 제어 플래그 전달 → 논리 흐름 제어 |
⑤ 스탬프 결합 (Stamp) | 필요한 데이터 일부만 쓰지만, 전체 구조체 전달 |
⑥ 자료 결합 (Data) | 필요한 데이터만 정확히 전달 (이상적!) |
⑦ 메시지 결합 (Message) | 객체끼리 메시지만 주고받는 완전한 느슨한 결합 (OOP 최적) |
18. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력 값을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#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);
}
|
case 문에 break가 없으면 default도 같이 실행됨
따라서 a = 11, b = 24
정답 -13
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 실기 문제 정리 - 3 (2023년 1회, 2022년 3회) (1) | 2025.04.19 |
---|---|
[정보처리기사] 실기 문제 정리 - 2 (2024년 1회, 2023년 3회, 2023년 2회) (1) | 2025.04.16 |
[정보처리기사] 전공자 필기 4일 합격 후기 (0) | 2025.02.15 |
[정보처리기사] 문제 정리 - 4 (0) | 2025.02.10 |
[정보처리기사] 문제 정리 - 3 (2) | 2025.02.09 |