정처기 실기 : 2023년 2회차 기출, 1️⃣ ~ 🔟

m_ngyeong·2024년 4월 16일
0
post-thumbnail

정보처리기사 실기


📝 2023년 2회차 기출, 1️⃣ ~ 🔟

1. C Lang. 

⭐️ 조건 : 입력값이 54321일 경우, 출력값이 43215가 되도록

#include <stdio.h>

int main(void) {
    
    int n[5];
    int i;
    
    for(i=0; i<5; i++){
        printf("숫자를 입력해주세요: ");
        scanf("%d", &n[i]);
    }
    
    for(i=0; i<5; i++){
        printf("%d", __________ );
    }
    
    return 0;
}

🖍 n[(i+1) % 5]
% 연산자 : 왼쪽 값을 오른쪽 값으로 나눈 나머지를 계산하는 연산자

2. Java Lang.

⭐️ 조건 : 돈이 총 46320원일 경우 1000원, 500원, 100원, 10원의 지폐 및 동전을 이용하여 아래의 항목들을 사용하여 "최소한의 코드"를 작성

  • 변수 : m
  • 연산자 : /, %
  • 괄호 : [, ], (, )
  • 정수 : 1000, 500, 100, 10
class HelloWorld {
    public static void main(String[] args) {
        int m = 4620;
        
        int a = ____________;
        int b = ____________;
        int c = ____________;
        int d = ____________;
        
        System.out.println(a); // 천원짜리     4장 출력
        System.out.println(b); // 오백원원짜리 1장 출력
        System.out.println(c); // 백원짜리     1장 출력
        System.out.println(d); // 십원짜리     2장 출력
    }
}

🖍
m / 1000
(m % 1000) / 500
(m % 500) / 100
(m % 100) / 10

3. C Lang. - 전역변수 / Pointer

⭐️ 조건 : 입력값은 홍길동, 김철수, 박영희 순서로 주어짐

#include <stdio.h>
#include <stdlib.h>

char n[30];
char *test(){
    printf("입력하세요: ");
    gets(n);
    return n;
}

int main() {
    char * test1;
    char * test2;
    char * test3;
    
    test1 = test();
    test2 = test();
    test3 = test();
    
    printf("%s\n", test1);
    printf("%s\n", test2);
    printf("%s", test3);
}

🖍
박영희
박영희
박영희

1️⃣ test1, test2, test3는 char형 변수를 가리키는 포인터 변수 선언.
2️⃣ test() 함수를 실행, test() 함수는 char * 타입으로 리턴하며, nchar * 타입으로 지정 됨.
3️⃣ gets() 함수를 통해 입력 받은 문자열을 전역 변수 n[30]에 저장. (배열명 == 배열의 주소값)
4️⃣ return n 에 의해 n의 주소값을 돌려줌.
5️⃣ test1에 n의 주소값을 저장.
6️⃣ test2 = test();의 구문에 의해 gets(n)의 함수가 다시 호출되면서 '홍길동'이라고 저장되어 있는 전역 변수 n[30]에 '김철수'를 덮어씀.
7️⃣ test2에 n의 주소값을 저장.
8️⃣ test3 = test();의 구문도 마찬가지로 test3에 n의 주소값을 저장.
9️⃣ ∴ test1, test2, test3 모두 같은 n의 주소값을 가지고 있으며, n은 마지막으로 저장된 '박영희' 값을 가지고 있음.

  • * : 자료형 뒤에 *를 붙이면 주소를 저장하는 포인터 변수,
    * 연산은 주소에 해당하는 값을 가리킴
  • & : 일반 변수명 뒤에 &를 붙이면 해당 변수의 주솟값
    *(&)과 같이 두 연산을 같이 쓰면 서로 상쇄 됌
  • gets() : scanf() 함수와 달리 문자열을 공백 단위로 끊지 않고 줄바꿈이 일어날 시 문자열 끝에 '\0'이 붙여, 공백을 포함한 문자열을 입력 받음.
  • getchar() : 문자를 입력 받음
  • puts() : 문자열(string)만을 출력하는 함수, 문자열 출력 후 줄 바꿈을 시전 함
  • putchar() : 문자를 출력

4. SQL - DML, INSERT

학번이름학년전공전화번호
240416푸바오4소프트웨어공학010-0000-0000

⭐️ 조건 : 문자열의 경우 작은 따옴표(') 사용

CREATE TABLE 학생(
	학번 int, 
    이름 varchar(20),
    학년 int,
    전공 varchar(30),
    전화번호 varchar(20),
)

🖍 INSERT INTO 학생(학번, 이름, 학년, 전공, 전화번호) VALUES(240416, '푸바오', 4, '소프트웨어공학', '010-0000-0000');

  • DML : DB 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어
  • INSERT : 테이블에서 새로운 튜플 삽입
    INSERT INTO 학생 VALUES('푸바오', 3);

5. C Lang. - switch 문

#include <stdio.h>

int main() {
    int n[3] = [73, 95, 82];
    int sum = 0;
    
    for(int i=0; i<3; i++){
        sum += n[i];
    }
    switch(sum/30){
        case 10:
        case 9: printf("A");
        case 8: printf("B");
        case 7:
        case 6: printf("C");
        default: printf("D");
    }
}

🖍 BCD
1️⃣ sum = 73 + 95 + 82 = 250
2️⃣ sum / 30 = 250 / 30 = 8
3️⃣ 8과 일치하는 값을 case문을 실행. ∴ B 출력
4️⃣ break가 존재하지 않을 경우, 진입한 case부터 break를 만날 때까지 또는 switch문 끝까지 동작
5️⃣ C 출력 D 출력

  • break : 반복문이나 switch문 안에서 break가 나오면 블록을 벗어남
  • continue : 반복문에서 continue 가 나오면 continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮김
  • default : case의 어느 값도 만족하지 않으면 default로 진입해 명령문 실행

6. Test Coverage - WhiteBox Test

  • 프로그램 내에 있는 결정포인트 내의 모든 각 개별 조건식에 대한 모든 가능한 결과 (참/거짓)에 대해 적어도 한번 수행한다.
  • 소프트웨어 테스트 수행 시 소스코드를 어느 수준까지 수행하였는가 를 나타내는 기준을 나타낸다.
  • 실제 업무에서는 다양한 툴을 사용하여 테스팅 수행한다.
  • True/False에 충분한 영향을 줄 수 없는 경우가 발생 가능한 한계점을 지닌다.

🖍 조건 커버리지(Condition Coverage)

  • Statement Coverage(문장 검증 기준) :
    소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스를 설계
  • Branch Coverage(분기 검증 기준) :
    소스 코드의 모든 조건문에 대해 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행 되도록 테스트 케이스를 설계
    Decision Coverage(결정 검증 기준)이라고도 함
  • Condition Coverage(조건 검증 기준) :
    소스 코드의 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행 되도록 테스트 케이스를 설계
  • Branch/Codition Coverage(분기/조건 기준) :
    분기 검증 기준과 조건 검증 기준을 모두 만족하는 설계로, 조건문이 True인 경우와 False인 경우에 따라 조건 검증 기준의 입력 데이터를 구문하는 테스트 케이스를 설계

7. C Lang. - for문 / 나누기

#include <stdio.h>

int main() {
    int c = 0;
    for(int i=1; i<=2023; i++){
        if(i%4 == 0) c++;
    }
    
    printf("\n%d", c);
}

🖍 505
0부터 2023까지의 숫자 중 4로 나누고 난 후 나머지가 0인 수의 개수를 찾는 코드이며, 그 개수는 2023을 4로 나눈 몫과 같다.

8. 보안 공격 대응 용어

  • 소프트웨어에서 워터마크 삭제 등과 같이 소프트웨어가 불법으로 변경(unauthorized modifications)되었을 경우, 그 소프트웨어가 정상 수행되지 않게 하는 기법이다.
  • 소프트웨어 변조 공격을 방어하기 위해 프로그램에 변조검증코드(tamper-proofing code)를 삽입하는 것도 한 방법으로, 변조검증코드의 용도는 첫째 프로그램이 변경되었는지를 탐지하는 것이고, 둘째는 변조가 탐지되었다면 프로그램이 실행되지 않게 한다.
  • 소프트웨어의 위변조 방지 역공학 기술의 일종으로 디지털 콘텐츠의 관련 산업이나 전자상거래 또는 보호해야 할 소프트웨어가 있는 다양한 산업 분야에 적용된다.

🖍 템퍼 프루핑(Tamper proofing)
= 템퍼 레스턴스

  • 허니팟(Honeypot) : 비정상적인 접근을 탐지하기 위해 의도적으로 설치해 둔 시스템으로 일부러 허술하게 만들어서 해커에게 노출하는 유인시스템
  • 핑거프린팅(Finger Printing) : 멀티미디어 콘텐츠에 저작권 정보와 구매한 사용자 정보를 삽입하여 곤텐츠 불법 배포자에 대한 위치 추적이 가능한 기술(저작권 정보구매자 정보)
  • 워터마킹(Water Marking) : 디지털 콘텐츠에 저적권자 정보를 삽입하여, 불법 복제 시 워터마크를 추출, 원소유자를 증명할 수 있는 콘텐츠 보호 기술

9. C Lang. - stack

#include <stdio.h>
#define MAX_SIZE 10

int isWhat[MAX_SIZE];
int point= -1; 

void into(int num) {
    if (point >= 10) printf("Full");
    isWhat[++point] = num;
}

int take() {
    if (isEmpty() == 1) printf("Empty");
    return isWhat[point--];
}

int isEmpty() {
    if (point == -1) return 1;
    return 0;
}

int isFull() {
    if (point == 10) return 1;
    return 0;
}

int main(int argc, char const *argv[]) {
    int e;
    into(5); into(2);
    
    while(!isEmpty()) {
        printf("%d", take());
        into(4); into(1); printf("%d", take()); 
        into(3); printf("%d", take()); printf("%d", take()); 
        into(6); printf("%d", take()); printf("%d", take()); 
    }

    return 0;
}

🖍 213465
1️⃣ into(5);, num= 5, point = -1, isWhat[0] = 5
2️⃣ into(2);, num= 2, point = 0, isWhat[1] = 2
3️⃣ !isEmpty()= ture, isEmpty()는 0을 리턴
4️⃣ printf("%d", take());, take() 함수 실행 → isWhat[1]를 리턴 → point = 0, ∴ 2 출력
5️⃣ into(4);, num= 4, point = 0, isWhat[1] = 4
6️⃣ into(1);, num= 1, point = 1, isWhat[2] = 1
7️⃣ printf("%d", take());, take() 함수 실행 → if문에 의해 isEmpty() 함수를 실행하여 0을 리턴 → isWhat[2]를 리턴 → point = 1, ∴ 1 출력
8️⃣ into(3);, num= 3, point = 1, isWhat[2] = 3
9️⃣ take() 함수 실행 → isWhat[2]를 리턴 → point = 1, ∴ 3 출력
1️⃣0️⃣ take() 함수 실행 → isWhat[1]를 리턴 → point = 0, ∴ 4 출력
1️⃣1️⃣ into(6);, num= 6, point = 0, isWhat[1] = 6
1️⃣2️⃣ take() 함수 실행 → isWhat[1]를 리턴 → point = 0, ∴ 6 출력
1️⃣3️⃣ take() 함수 실행 → isWhat[0]를 리턴 → point = -1, ∴ 5 출력

10. DB 설계 순서

🖍 요구조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현



참고,
https://newbt.kr/시험/정보처리기사%20실기/2023년%202회/오소프트0506,
https://www.youtube.com/watch?v=czoWXdwEygc,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.

profile
ʚȉɞ

0개의 댓글