* 문제
( ) 은/는 '세션을 가로채다.' 라는 의미로 다른 사람의 세션 상태를 훔치거나 도용하여 액세스하는 해킹 기법이다.
TCP ( ) 은/는 TCP의 3-way 핸드셰이크가 완료된 후에 공격자가 시퀀스 번호 등을 조작하여 정상적인 세션을 가로채고 인증 없이 통신을 탈취하는 공격이다.
정답
1️⃣ 첫 번째 빈칸: 세션 하이재킹 (Session Hijacking)
2️⃣ 두 번째 빈칸: 세션 하이재킹 (Session Hijacking)
핵심 키워드 ✨
- 세션(Session)
- 하이재킹(Hijacking)
- 3-way 핸드셰이크
- 시퀀스 번호(Sequence Number)
- 통신 탈취
핵심 문장 강조 ⭐
- 세션 하이재킹(Session Hijacking) 은 '세션을 가로채는' 해킹 기법으로, 다른 사람의 세션을 도용하여 권한을 탈취합니다.
- TCP 세션 하이재킹은 3-way 핸드셰이크가 끝난 후, 공격자가 시퀀스 번호를 조작하여 정상 세션을 탈취합니다.
쉽게 해설하기 📝
📌 세션(Session)이란?
웹사이트나 네트워크 서비스에 로그인하면 "나 누구야" 하고 계속 상태를 유지하죠? 이 상태유지를 "세션"이라고 해요.
📌 하이재킹(Hijacking)이란?
하이재킹은 '가로채기', '납치'라는 뜻이에요.
즉, Session Hijacking 은 "다른 사람의 세션 상태를 가로채서 내가 그 사람인 것처럼 행동하는 것"입니다.
📌 TCP 세션 하이재킹
TCP 연결은 3-way 핸드셰이크로 시작돼요. (SYN → SYN/ACK → ACK)
정상 연결이 된 후, 서로 시퀀스 번호를 주고받으면서 데이터 흐름을 맞춰요.
그런데 공격자가 이 시퀀스 번호를 예측하거나 조작하면, 중간에 끼어들어 정상적인 연결을 탈취할 수 있어요.
이걸 TCP 세션 하이재킹이라고 합니다.
요약
👉 Session Hijacking (세션 하이재킹)
👉 TCP Session Hijacking (TCP 세션 하이재킹)
* 다음은 제약조건과 관련된 문제이다. 괄호안에 알맞는 용어를 보기에 골라 작성하시오.

[보기]
개체, 참조, 도메인
➡️ 정답은 다음과 같습니다:
- ( ㄱ ) → 도메인 무결성 제약조건
- ( ㄴ ) → 개체 무결성 제약조건
- ( ㄷ ) → 참조 무결성 제약조건
핵심 키워드 ✨
- 도메인 무결성 (Domain Integrity)
- 개체 무결성 (Entity Integrity)
- 참조 무결성 (Referential Integrity)
- 기본키(Primary Key)
- 외래키(Foreign Key)
핵심 문장 ⭐
- 도메인 무결성은 속성이 가질 수 있는 값의 범위(도메인)를 제한하는 규칙이다.
- 개체 무결성은 기본키는 NULL이 될 수 없고, 유일해야 한다는 규칙이다.
- 참조 무결성은 외래키가 부모 테이블의 기본키 값을 참조하도록 보장하는 규칙이다.
쉽게 해설하기 📝
📌 도메인 무결성 (Domain Integrity)
- **속성(컬럼)**에 어떤 값이 들어올 수 있는지 제한하는 것!
- 예) 나이는 "숫자"만 가능하고 0~120까지만 허용, 성별은 '남', '여'만 허용 등
- 그래서 "속성"이 대상이고 NULL 허용 가능 (조건에 따라 다름)
📌 개체 무결성 (Entity Integrity)
- 기본키(Primary Key)는 절대 NULL이 되면 안됨
- 그리고 반드시 **유일(unique)**해야 해요 → 중복 안됨!
- 릴레이션(테이블)당 기본키는 1개만 설정 가능
📌 참조 무결성 (Referential Integrity)
- **외래키(Foreign Key)**는 다른 테이블의 기본키를 참조
- 외래키는 부모 테이블에 없는 값이면 안 됨
- 부모 테이블 수정/삭제 시 참조하는 자식 테이블도 함께 체크 필요
* 아래의 내용에서 설명 글의 괄호안의 용어를 영문 약자로 작성하시오.
( ) 은/는 3글자의 영어 약자로 이루어진 오류 기법으로 데이터를 전송하거나 저장할 때 데이터의 오류를 감지하는 데 사용되는 오류 검출 코드이다.
( ) 은/는 데이터에 체크섬을 추가하여 데이터를 전송하거나 저장한 후, 수신 또는 읽을 때 이 체크섬을 다시 계산하여 데이터가 변경되었는지 확인하는 기법이다.
( ) 은/는 데이터 전송의 안정성을 높이는 데 중요한 역할을 한다.
데이터는 이진수(0과 1)로 표현되며 정해진 다항식(x³ + x + 1)을 기반으로 데이터를 2진수 나눗셈하고나머지를 ( ) 값으로 삼는다.
정답
1️⃣ ( CRC )
2️⃣ ( CRC )
3️⃣ ( CRC )
4️⃣ ( CRC )
왜 모두 CRC일까요? 설명 들어볼게요! 👇
핵심 키워드 ✨
- CRC (Cyclic Redundancy Check)
- 오류 검출 코드(Error Detection Code)
- 체크섬(Checksum)
- 이진수(2진수) 나눗셈
- 다항식(Polynomial)
핵심 문장 ⭐
- CRC는 3글자의 오류 검출 코드로, 데이터 오류를 감지하는 데 사용됩니다.
- CRC는 체크섬을 추가하여 전송 후 검증하는 방식입니다.
- CRC는 데이터 전송의 안정성을 높여줍니다.
- CRC 값은 다항식 기반으로 이진수 나눗셈 후 나온 나머지입니다.
쉽게 해설하기 📝
📌 CRC란?
👉 Cyclic Redundancy Check (순환 중복 검사)
👉 오류 검출 코드 중 가장 대표적인 것!
👉 3글자 약자: CRC
📌 어떻게 동작하나요?
1️⃣ 데이터를 전송하거나 저장할 때 → 다항식으로 이진수 나눗셈
2️⃣ 나머지 값(Checksum)을 덧붙여서 같이 보냄
3️⃣ 수신 측에서 다시 계산해서 비교 → 오류 유무 확인
4️⃣ 오류 발견 시 재전송 요청!
📌 왜 중요할까?
👉 데이터를 전송하다 보면 중간에 노이즈가 생기거나 비트가 깨질 수 있음
👉 CRC는 그런 오류를 쉽게 발견할 수 있는 아주 효율적인 방법
👉 네트워크, 저장장치, 디지털 방송 등에서 필수적으로 사용됨
암기 팁 🎁
"CRC는 오류 잡는 치트키!"
👉 C Cyclic
👉 R Redundancy
👉 C Check
3글자 약자 CRC, 3대 특징 기억하기!
1️⃣ 오류 검출 코드
2️⃣ 체크섬 기반
3️⃣ 이진수 나눗셈 → 나머지 값 사용
* 다음은 악성코드 관련된 문제이다. 아래 내용을 확인하여 보기에 골라 작성하시오.
사용자가 원치 않는 소프트웨어를 구매하도록 조작하기 위해 사회 공학을 사용하여 충격, 불안 또는 위협에 대한 인식을 유발하는 악성 소프트웨어의 한 형태이다.
‘겁을 주다’라는 영어 단어에서 유래한 것으로 공포를 이용하여 피해자를 속여 대가를 지불 하거나 특정 행동을 유도하는 랜섬웨어이다.
가짜 바이러스 경고나 시스템 문제를 표시하여 사용자가 돈을 지불하거나 특정 소프트웨어를 설치하도록 속이는 방식으로 작동한다.
보기
ㄱ. 컴포넌트 웨어 ㄴ. 유즈웨어 ㄷ. 셔블웨어 ㄹ. 스캐어 웨어 ㅁ. 안티 스파이 웨어 ㅂ. 네트웨어 ㅅ. 그룹웨어 ㅇ. 애드웨어
문제 분석
👉 "겁을 주다"라는 단어에서 유래
👉 공포감을 유발
👉 가짜 경고창으로 속여서 돈을 지불하게 함
👉 일종의 랜섬웨어 유형
정답
ㄹ. 스캐어 웨어 (Scareware)
핵심 키워드 ✨
- Scareware (스캐어 웨어)
- 겁을 주다(Scare)
- 사회공학(Social Engineering)
- 가짜 경고창(Fake Warning)
- 금전 요구(Payment Demand)
- 랜섬웨어의 일종
핵심 문장 ⭐
- 스캐어웨어(Scareware) 는 사용자의 공포심을 유발하여 원치 않는 소프트웨어 구매 또는 돈을 지불하게 유도하는 악성코드입니다.
- 'Scare(겁주다)' + Ware(소프트웨어) 의 합성어입니다.
- 가짜 바이러스 경고 또는 시스템 문제를 알리는 창을 띄워 사용자를 속이는 방식으로 작동합니다.
암기 팁 🎁
👉 스캐어 = Scare = 겁주다!
👉 팝업창 띄워서 겁주는 악성코드 = 스캐어웨어
👉 팝업이 뜨면 "이건 스캐어웨어일 수 있다" 생각하기!
★ 스캐어 → 스카! → 깜짝 놀람! = 겁주는 소프트웨어
보기 단어 해설 (참고용)
- ㄱ. 컴포넌트 웨어 → 구성요소 기반 소프트웨어
- ㄴ. 유즈웨어 → 상용 프로그램
- ㄷ. 셔블웨어 → 쓸모없는 소프트웨어 (불필요하게 설치된 프로그램)
- ㄹ. 스캐어웨어 → 정답!
- ㅁ. 안티 스파이웨어 → 스파이웨어 제거 프로그램
- ㅂ. 네트웨어 → 네트워크 관련 소프트웨어
- ㅅ. 그룹웨어 → 협업 지원 소프트웨어
- ㅇ. 애드웨어 → 광고 보여주는 소프트웨어
public class Main {
public static void main(String[] args) {
int a=5,b=0;
try{
System.out.print(a/b);
}catch(ArithmeticException e){
System.out.print("출력1");
}catch(ArrayIndexOutOfBoundsException e) {
System.out.print("출력2");
}catch(NumberFormatException e) {
System.out.print("출력3");
}catch(Exception e){
System.out.print("출력4");
}finally{
System.out.print("출력5");
}
}
정답 : 출력1출력5
🔷 2️⃣ 코드의 의도와 목적
이 코드는 예외 처리(try-catch-finally) 를 연습하는 코드야.
목적:
👉 어떤 예외(Exception)가 발생할 때
👉 어떤 catch 블록이 실행되고
👉 finally는 어떻게 동작하는지 확인하는 코드야.
🔷 3️⃣ 코드 흐름 설명
- a/b 는 5 / 0 이지?
- 0으로 나누기 는 자바에서 ArithmeticException 이 발생해 (산술 예외).
그러면 어떻게 될까?
- 예외가 발생하면, try 블록은 중단되고 바로 catch 블록으로 이동해.
catch 블록 중에 어떤 게 실행될까?
- 이 catch 가 정확히 ArithmeticException 을 잡아.
- 그래서 출력1 이 출력돼.
finally 블록은?
- finally 블록은 무조건 실행 돼.
- 그래서 출력5 도 출력돼.
* 아래 내용은 ARP/RARP에 대한 설명이다. 각 설명에 해당하는 것을 작성하시오.
( 1 ) 은/는 네트워크상에서 IP 주소를 MAC 주소로 변환하는 프로토콜이고,
( 2 ) 은/는 MAC 주소를 IP 주소로 변환하는 프로토콜이다.
정답 : (1) ARP (Address Resolution Protocol)
(2) RARP (Reverse Address Resolution Protocol)
✅ 암기 팁
🔸 이름에 힌트가 있다!
- ARP: 그냥 ARP → IP를 먼저 안다 → IP → MAC
- RARP: Reverse ARP → 거꾸로 한다 → MAC → IP
*

정답:
이순신 | 1000
1️⃣ 조인 먼저 생각하기
emp.id 와 sal.id 가 같은 경우만 연결돼.
가능한 경우:
| 1002 | 홍길동 | 1002 | 300 |
| 1004 | 강감찬 | 1004 | 300 |
| 1008 | 이순신 | 1008 | 1000 |
조인 결과는 이 3개지만, 조건이 있어서 통과하는 건 마지막 것 뿐이야.
2️⃣ 조건 확인하기
incentives >= 500 → 1000만 해당됨.
* 아래는 데이터베이스에 관련된 설명이다. 알맞는 용어를 보기에서 골라 괄호를 작성하시오.
1. 릴레이션에서 속성의 개수를 의미 : ( 1 )
2. 릴레이션에서 튜플의 개수를 의미 : ( 2 )
3. 한 릴레이션의 속상이 다른 릴레이션의 기본 키를 참조할 때, 참조하는 속성을 의미 : ( 3 )
4. 특정 속성에 대해 입력될 수 있는 값의 유형이나 범위를 의미하고 무결성을 보장하는 기준 : ( 4 )
[보기]
ㄱ. domain ㄴ. primary ㄷ. degree ㄹ. candidate ㅁ. cardinality ㅂ. attribute ㅅ. foreign
(1) ㄷ
(2) ㅁ
(3) ㅅ
(4) ㄱ
1️⃣ degree (디그리)
- 테이블에 몇 개의 컬럼(속성) 이 있나?
- 열(column)의 개수 = degree
예시: 이름, 나이, 주소 → 3개 열 → degree = 3
2️⃣ cardinality (카디널리티)
- 테이블에 몇 개의 행(튜플) 이 있나?
- 행(row)의 개수 = cardinality
예시: 5명 회원 → 5개 행 → cardinality = 5
3️⃣ foreign (포린)
- 어떤 컬럼이 다른 테이블의 기본키(primary key) 를 참조하고 있으면 foreign key
- 외래키 → 참조하는 키
4️⃣ domain (도메인)
- 한 속성에 대해 입력 가능한 값의 범위/유형
- 예) 성별 컬럼: 'M' 또는 'F'만 가능 → 이것이 domain
* IP 주소가 192.168.35.10, 서브넷 255.255.252.0인 PC에서 브로드캐스팅으로 다른 IP로 정보를 전달한다고 할 때 수신할 수 있는 알맞는 IP를 보기에서 골라 모두 작성하시오.
[보기]
ㄱ. 192.168.34.1
ㄴ. 192.168.32.19
ㄷ. 192.168.35.200
ㄹ. 192.168.33.138
ㅁ. 192.168.35.50
#include <stdio.h>
char Data[5] = {'B', 'A', 'D', 'E'};
char c;
int main(){
int i, temp, temp2;
c = 'C';
printf("%d\n", Data[3]-Data[1]);
for(i=0;i<5;++i){
if(Data[i]>c)
break;
}
temp = Data[i];
Data[i] = c;
i++;
for(;i<5;++i){
temp2 = Data[i];
Data[i] = temp;
temp = temp2;
}
for(i=0;i<5;i++){
printf("%c", Data[i]);
}
}
4
BACDE
✅ 코드의 의도와 목적
- 배열에 'C'를 적절한 위치에 삽입하고 뒤의 값들을 밀어주는 코드야.
- "배열 정렬"이 아니라 삽입(insert)하는 코드 흐름 연습하는 문제야.
1️⃣ 먼저 선언부:
→ 배열은:
[ 'B', 'A', 'D', 'E', (쓰레기값) ] ← 크기 5인데 마지막 값은 초기화 X
삽입할 문자 'C'.
2️⃣ 첫 번째 출력:
- Data[3] → 'E' → 아스키코드 69
- Data[1] → 'A' → 아스키코드 65
👉 69 - 65 = 4
3️⃣ for문으로 삽입 위치 찾기:
👉 c = 'C'
👉 Data = [ 'B', 'A', 'D', 'E', ? ]
i 값별로 비교:
| 0 | 'B' | 'B' > 'C' → false | 계속 |
| 1 | 'A' | 'A' > 'C' → false | 계속 |
| 2 | 'D' | 'D' > 'C' → true | break |
→ i = 2 에서 멈춤! → 'D' 자리에 'C' 삽입할 것.
4️⃣ 값 밀기
temp = Data[i]; // temp = 'D'
Data[i] = c; // Data[2] = 'C'
i++; // i = 3
for(;i<5;++i){
temp2 = Data[i];
Data[i] = temp;
temp = temp2;
}
→ 한 칸씩 뒤로 밀어주기!
처음 상태:
| 0 | 'B' |
| 1 | 'A' |
| 2 | 'C' |
| 3 | 'D' |
| 4 | 'E' |
13
코드의 의도와 목적
이 코드는 2차원 배열을 동적 할당해서 데이터를 저장한 뒤,
특정 규칙으로 sum을 계산하고 출력하는 코드입니다.
전체 흐름은:
- data 배열의 값을 2차원 배열 arr 에 채움 (set 함수)
- arr 배열을 순회하며 합계를 계산 (짝수 index는 +, 홀수 index는 -)
- sum 결과 출력
📌 3️⃣ set 함수 분석 (중요 포인트!)
arr[((i + 1) / rows) % rows][(i + 1) % cols] = data[i];
이 부분이 핵심이야. 근데... 복잡하게 꼬아 놓았음!
쉽게 바꾸면 그냥 → 데이터를 90도 회전해서 넣는 것처럼 됨!
직접 i = 0 ~ 8 대입해 보면:
| 0 | (1)/3 %3 =0 | 1 | 5 | arr[0][1] |
| 1 | (2)/3 %3 =0 | 2 | 2 | arr[0][2] |
| 2 | (3)/3 %3 =1 | 0 | 7 | arr[1][0] |
| 3 | (4)/3 %3 =1 | 1 | 4 | arr[1][1] |
| 4 | (5)/3 %3 =1 | 2 | 1 | arr[1][2] |
| 5 | (6)/3 %3 =2 | 0 | 8 | arr[2][0] |
| 6 | (7)/3 %3 =2 | 1 | 3 | arr[2][1] |
| 7 | (8)/3 %3 =2 | 2 | 6 | arr[2][2] |
| 8 | (9)/3 %3 =0 | 0 | 9 | arr[0][0] |
결국 완성된 arr[][]는:
arr[0][0] = 9 arr[0][1] = 5 arr[0][2] = 2
arr[1][0] = 7 arr[1][1] = 4 arr[1][2] = 1
arr[2][0] = 8 arr[2][1] = 3 arr[2][2] = 6
4️⃣ sum 계산
for (int i = 0; i < rows * cols; i++) {
sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
}
하나씩 따져볼게:
짝수 인덱스(i % 2 == 0)는 +,
홀수 인덱스는 -
| 0 | (0,0) | 9 | +9 | 9 |
| 1 | (0,1) | 5 | -5 | 4 |
| 2 | (0,2) | 2 | +2 | 6 |
| 3 | (1,0) | 7 | -7 | -1 |
| 4 | (1,1) | 4 | +4 | 3 |
| 5 | (1,2) | 1 | -1 | 2 |
| 6 | (2,0) | 8 | +8 | 10 |
| 7 | (2,1) | 3 | -3 | 7 |
| 8 | (2,2) | 6 | +6 | 13 |
최종적으로 → sum = 13 🎉
📌 5️⃣ 쉽게 푸는 팁
1️⃣ 먼저 set 함수가 어떻게 넣는지 표 그리기
→ 복잡하게 보이지만 좌표 적어 보면 쉬워.
2️⃣ 그리고 sum 계산은 그냥 for문 돌면서
→ 짝수는 +, 홀수는 -만 신경 쓰면 됨.
* 다음은 결합도와 관련된 내용이다. 보기에 알맞는 답을 골라 작성하시오.
(1) 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도
(2) 모듈 간의 인터페이스로 배열이나 오브젝트, 자료구조 등이 전달되는 경우의 결합도
(3) 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도
[보기]
ㄱ. 자료 결합도 ㄴ. 스탬프 결합도 ㄷ. 제어 결합도 ㄹ. 공통 결합도 ㅁ. 내용 결합도 ㅂ. 외부 결합도
📌 문제 정답
(1) 👉 ㅁ. 내용 결합도
(2) 👉 ㄴ. 스탬프 결합도
(3) 👉 ㄹ. 공통 결합도
📌 핵심 키워드 & 핵심 문장
| 내용 결합도 | 다른 모듈 내부 내용을 직접 접근 | 가장 나쁨 |
| 스탬프 결합도 | 자료구조(배열, 오브젝트) 통째로 전달 | 필요 없는 정보까지 전달 |
| 공통 결합도 | 전역 변수를 공유 | 전역 변수로 간접 연결 |
📌 암기 팁
"내 스 공" 으로 기억해!
(내 스 공 → 내용, 스탬프, 공통)
👉 상황별 키워드로 구별:
- "내부 침범" → 내용 결합도
- "스탬프처럼 덩어리 전달" → 스탬프 결합도
- "공통 변수" → 공통 결합도
public class Main {
public static void main(String[] args) {
new Child();
System.out.println(Parent.total);
}
}
class Parent {
static int total = 0;
int v = 1;
public Parent() {
total += (++v);
show();
}
public void show() {
total += total;
}
}
class Child extends Parent {
int v = 10;
public Child() {
v += 2;
total += v++;
show();
}
@Override
public void show() {
total += total * 2;
}
}
54
📌 코드의 의도와 목적
이 코드는 클래스 상속 시 생성자 호출 순서 + 오버라이딩된 메서드 호출 + static 변수 변화 흐름을 묻는 문제야.
👉 "생성자 호출 순서와 메서드 호출 순서를 이해했냐?"
👉 "오버라이딩이 언제 발생하는지 아냐?"
이걸 묻는 문제야.
📌 쉽게 푸는 팁
1️⃣ 생성자 호출 순서 기억
항상 부모 생성자가 먼저 호출됨!!
2️⃣ 오버라이딩된 메서드는 언제나 실제 객체 기준으로 호출됨!
| 1 | Parent 생성자 → total += (++v) | 2 |
| 2 | Parent 생성자 → show() → Child.show() | 6 |
| 3 | Child 생성자 → total += v++ (v=12) | 18 |
| 4 | Child 생성자 → show() → Child.show() | 54 |
* 아래는 디자인 패턴에 대한 설명이다. 알맞는 답을 보기에 골라 작성하시오.
서로 다른 인터페이스를 가진 클래스들을 연결해 사용 가능하게 한다.
기존 클래스(Adaptee)를 원하는 인터페이스(Target)에 맞게 변환하는 어댑터(Adapter)를 만든다.
기존 클래스를 감싸서(wrapper) 인터페이스를 변환해주는 역할을 한다.

정답 : Adapter
🌟 핵심 키워드
- 서로 다른 인터페이스
- 변환
- 기존 클래스(Adaptee)
- 원하는 인터페이스(Target)
- 감싸서(wrapper)
- 어댑터(Adapter)
💬 핵심 문장
- 서로 다른 인터페이스를 연결해 사용 가능하게 만든다.
- 기존 클래스를 감싸서 인터페이스를 변환한다.
- Target 인터페이스에 맞게 Adaptee를 변환한다.
✨ 쉬운 해설
Adapter 패턴은 서로 맞지 않는 부품(클래스) 을 중간에서 연결해주는 어댑터(변환기) 를 만드는 것이라고 생각하면 돼.
예를 들어 220V 콘센트(Adaptee) 에 110V 기기(Target) 를 사용하려면 변환 플러그(Adapter) 가 필요하지?
그런 것처럼, 기존 클래스를 원하는 방식으로 사용할 수 있도록 중간에서 맞춰주는 역할을 하는 패턴이야.
🧠 암기팁
“어댑터 = 변환기, 연결기”
- 콘센트에 플러그를 꽂는 장면 떠올리기 → 서로 다른 인터페이스 연결
- 영어 단어 Adapter 자체가 "적용하게 만드는 것" → 인터페이스 변환
연상 예시
→ 220V ↔ 110V 변환 플러그
→ USB-C ↔ HDMI 변환 케이블
* 문장(Statement) 커버리지 테스트를 수행하려고 한다. 코드를 아래의 제어 흐름도 빈칸에 연결되도록 작성하고 문장 커버리지 순서대로 작성하시오.
int Main(int b[], int m, int x) {
int a = 0;
while (a < m || b[a] < x) {
if (b[a] < 0)
b[a] = -b[a];
a++;
}
return 1;
}

1. ( ① ) 2. ( ② ) 3. ( ③ ) 4. ( ④ ) 5. ( ⑤ ) 6. ( ⑥ )
문장 커버리지 순서 1 → 2 → ( ⑦ )
정답 :
(1) int a = 0
(2) a < m || b[a] < x
(3) b[a] < 0
(4) b[a] = -b[a];
(5) a++;
(6) return 1;
(7) ③ → ④ → ⑤ → ② → ⑥
1단계: 흐름도를 코드랑 매칭
- 흐름도 박스 (1) → int a = 0;
- 흐름도 박스 (2) → while (조건) 검사
- 흐름도 박스 (3) → if (b[a] < 0)
- 흐름도 박스 (4) → b[a] = -b[a];
- 흐름도 박스 (5) → a++;
- 흐름도 박스 (6) → return 1;
2단계: 실행 순서 따라가기
- 시작 → (1)
- while 조건 검사 → (2)
- if로 들어감 → (3)
- if가 참 → (4) 실행 후 → (5) a++
- 다시 while로 → (2)
- 반복하다 조건 false 되면 → (6) return
3단계: (7)의 순서 해석
③ → ④ → ⑤ → ② → ⑥
= if 조건으로 들어가서 값 바꾸고 a 증가 후 다시 while 검사, while 탈출 시 return
'정보처리기사' 카테고리의 다른 글
| [실기노트] 소프트웨어 구축 (0) | 2025.06.03 |
|---|---|
| [개념] 소프트웨어 설계 (0) | 2025.06.03 |
| [이론] 운영체제(페이지 교체, CPU 스케쥴링, 리눅스 명령어) (0) | 2025.06.02 |
| [용어] 소프트웨어 보안: 방어 측면 (0) | 2025.06.01 |
| [용어] 소프트웨어 보안: 공격측면 (2) | 2025.06.01 |