정처기 실기 : 2024년 3회차 기출, 1️⃣ ~ 🔟

m_ngyeong·2025년 3월 10일
0
post-thumbnail

정보처리기사 실기


📝 2024년 3회차 기출, 1️⃣ ~ 🔟

1. Java Lang. - equals()

출제 : [2023년 2회 기출]

public class Main {
	static void func(String[] m, int n){
		for(int i=1; i<n; i++){
			if(m[i-1].equals(m[i])){
				System.out.print("O");
			}
			else {
				System.out.print("N");
			}
		}
		for(String mo:m){
			System.out.print(mo);
		}
	}
    
	public static void main(String[] args){
		String[] m = new String[3];
		m[0] = "A";
		m[1] = "A";
		m[2] = new String("A");
		func(m, 3);
	}
}

🖍 OOAAA

if(m[i-1].equals(m[i]))

  • equal() : 객체끼리 내용만 비교 (기본 자료형에서 사용불가)
  • == : 기존 자료형일 경우 내용 비교, 참조형일 경우 주소의 값 비교
  • m[0].equals(m[1]) : true
  • m[1].equals(m[2]) : true
    ➡️ OO

for(String mo:m)

➡️ AAA

public class Main {
	public static void main(String[] args){
		String[] m = new String[3];
		m[0] = "A";
		m[1] = m[0];
		m[2] = new String("A");
		// == 연산자는 주소를 비교
        System.out.println(m[0] == m[1]); // true, m[1]에 m[0]값을 넣었으므로 주소를 같이 공유
        System.out.println(m[0] == m[2]); // false, m[0]과 m[2]는 각각 생성 되었으므로 주소가 다름
        // equals() 는 내용을 비교
        System.out.println(m[0].equals(m[1])); // ture
        System.out.println(m[0].equals(m[2])); // true
        // 내용을 비교하기에 abc 내용이 같으므로 true 반환
	}
}

2. Python Lang.

def test(ls):
	for i in range(len(ls) // 2):
		ls[i], ls[-i-1] = ls[-i-1], ls[i]
ls = [1,2,3,4,5,6]
test(ls)
print(sum(ls[::2]) - sum(ls[1::2]))

🖍 3

  • len(ls) = 6
    len(ls) // 2 = 3
  • for i in range(3):
    ls[0], ls[-1] = ls[-1], ls[0] = ls[0], ls[5] = ls[5], ls[0]
    ls = [6,5,4,3,2,1]
  • ls[::2] = [6, 4, 2] ls[1::2] = [5, 3, 1]
    ∴ (6+4+2) - (5+3+1) = 3

3. SQL - count(*)

[employee]

nofirst_namelast_nameproject_id
1JohnDoe10
2JimCarry20
3RachelRedmond10

[project]

project_idname
10Alpha
20Beta
10Gamma
SELECT count(*) 
FROM employee e JOIN project p ON e.project_id = p.project_id 
WHERE p.name IN (SELECT name 
    			FROM project p 
    			WHERE p.project_id IN (SELECT project_id 
                					   FROM employee e 
                                       GROUP BY e.project_id 
                                       HAVING count(*) < 2));

🖍 1

(SELECT project_id 
FROM employee e 
GROUP BY e.project_id 
HAVING count(*) < 2)
project_id
20
(SELECT name 
 FROM project p 
 WHERE p.project_id IN((...))
name
Beta
CREATE TABLE employee
	( no 		  NUMBER      NOT NULL,
	  first_name  VARCHAR(10) NOT NULL,
	  last_name   VARCHAR(10) NOT NULL,
      project_id  NUMBER	     NOT NULL);
     
CREATE TABLE project
	( project_id  NUMBER	  NOT NULL,
	  name  	  VARCHAR(10) NOT NULL);
      
      
INSERT INTO employee(no, first_name, last_name, project_id) 
	VALUES(1, 'John', 'Doe', 10);
INSERT INTO employee(no, first_name, last_name, project_id) 
	VALUES(2, 'Jim', 'Carray', 20);
INSERT INTO employee(no, first_name, last_name, project_id) 
	VALUES(3, 'Rachel', 'Redmond', 10);

INSERT INTO project(project_id, name) 
	VALUES(10, 'Alpha');
INSERT INTO project(project_id, name) 
	VALUES(20, 'Beta');
INSERT INTO project(project_id, name) 
	VALUES(10, 'Gamma');

4. LRU 알고리즘 부재 횟수, 프레임 3개

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
출제 : [2024년 1회 기출]

🖍 12
LRU(Least Recently Used) :
LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다.

5.

ICMP, 송신 주소를 공격 대상의 IP 주소로 위장하고, 수신 주소를 해당 네트워크 라우터의 브로드캐스트 주소로 설정하는 공격으로 과부화 시키는 기법이다. ICMP 패킷을 크게 만들어서 과부화 시키는 죽음의 핑과 같은 서비스 공격 유형이다.
출제 : [보안02]

🖍 스머핑(Smurfing) / 스머프(Smurf)

6. C Lang. - static 변수

#include <stdio.h>

int increase(){
	static int x = 0;
	x += 2;
	return x;
}

int main(){
	int x = 1;
	int sum = 0;
	for(int i=0; i<4; i++){
		x++;
		sum += increase();
	}	
	printf("%d", sum);
}

🖍 20

  • i=0일 때, static int x=2sum=2
  • i=1일 때, static int x=4sum=2+4
  • i=2일 때, static int x=6sum=2+4+6
  • i=3일 때, static int x=8sum=2+4+6+8

활용 예제:

#include <stdio.h>

void increaseNumber()
{
    int num1 = 0;    		 // 변수 선언 및 값 초기화
    printf("%d\n", num1);    // 변수 num1의 값을 출력
    num1++;    				 // 변수의 값을 1씩 증가
}

int main()
{
    increaseNumber();    // 0
    increaseNumber();    // 0
    increaseNumber();    // 0
    increaseNumber();    // 0: 변수가 매번 생성되고 사라지므로 0이 출력됨

    return 0;
}
  • num1은 지역 변수이므로 increaseNumber()를 벗어나면 값이 사라지며,
    다시 increaseNumber()를 호출했을 때 이전 결과와는 상관없이 새로운 변수가 생성됨
#include <stdio.h>

void increaseNumber()
{
    static int num1 = 0;     // 정적 변수 선언 및 값 초기화
    printf("%d\n", num1);    // 정적 변수 num1의 값을 출력
    num1++;                  // 정적 변수 num1의 값을 1 증가시킴
}

int main()
{
    increaseNumber();    // 0
    increaseNumber();    // 1
    increaseNumber();    // 2
    increaseNumber();    // 3: 정적 변수가 사라지지 않고 유지되므로 값이 계속 증가함

    return 0;
}
  • 정적 변수는 함수를 벗어나더라도 변수가 사라지지 않고 계속 유지되므로
    ++ 연산자가 적용되어 값이 계속 증가하게 됨.

7.

  • 인터넷을 통해 장치 간 사설 네트워크 연결을 생성하는 서비스로 장치의 실제 IP 주소를 가상 IP 주소로 대체하고, 데이터를 암호화하고, 데이터를 전 세계 보안 네트워크로 라우팅함으로써 정보를 보호하는 기법을 말한다.
  • IPsec

🖍 VPN

8. 디자인 패턴

2021년 2회 기출
( ) 패턴은 객체 간의 상호 작용하는 방법과 책임을 분배하는 방법에 중점을 두는 디자인 패턴으로 Command, Interpreter, Memento, Observer, Visitor등이 존재한다.

🖍 행위

9. 테스트 커버리지

  • 모든 명령문을 적어도 한 번 실행되도록 조합
  • 코드 내의 각 분기점이 true 또는 false로 평가될 때마다 해당 분기점이 모두 테스트 되는 것을 목표로 함
  • 각 분기점이 모든 가능한 경로로 실행되었는지 확인하는 데 사용되는 커버리지

  • 각 결정문이 참, 거짓을 한 번 이상 갖도록 조합
  • 코드의 흐름을 여러 갈래로 나누는 조건문 또는 선택문을 의미함
  • 예를 들어, if-else 문이나 switch 문에서 조건에 따라 실행 경로가 달라질 때를 의미 함

  • 결정문 내의 각 조건이 참, 거짓을 한 번 이상 갖는 조합
  • 개별 조건문 내에 있는 각각의 조건이 true와 false 모두를 만족하도록 테스트하는 것을 의미 함
  • 예를 들어, if (A && B)와 같은 구문에서 A와 B가 각각 true와 false가 되는 경우를 테스트하는 것이 목표

(보기)
㉠ 조건/결정 커버리지
㉡ 결정 커버리지
㉢ 조건 커버리지
㉣ 분기 커버리지
㉤ 변경 조건/결정 커버리지
㉥ 문장 커버리지
㉧ 다중 조건 커버리지

🖍 ① ㉥ 문장 커버리지, ② ㉣ 분기 커버리지, ③ ㉢ 조건 커버리지

10. 키(Key)

① 다른 테이블 릴레이션의 기본키(Primary Key)를 참조하며, 데이터 무결성을 유지하는데 중요한 역할을 하는 키
② 유일성과 최소성 만족하는 키
③ 후보키 주에서 기본 키로 선택되지 않은 나머지 키
④ 유일성만 만족, 최소성 만족하지 못하는 키

🖍 ① 외래키, ② 후보키, ③ 대체키, ④ 슈퍼키



참고,

profile
ʚȉɞ

0개의 댓글