본문 바로가기

개발/정보처리기사

[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 51-60번]

51. 다음은 C++ 소스 코드이다. 실행 결과를 쓰시오.

#include <iostream>
void main(){
  int s = 0;

  int i;
  for(i=1; i<=10; i++){
    if(i==2)
      continue;
    else if(i==4)
      break;
    s += i;
  }

  std::cout << i << " " << s;
}


정답) 4 4
해설) for문은 1부터 10까지 돌게 됩니다. 먼저 i가 1일 때는 if와 else if 조건이 맞지 않기 때문에 s += i;라는 문장을 실행하고 s는 1이 됩니다.
다음으로 i가 2일 때는 continue를 만나게 되어 다음 반복으로 넘어갑니다. i가 3일 때는 if와 else if 조건이 맞지 않기 때문에 s += i;라는 문장을 실행하고 s는 3을 더해서 4가 됩니다.
다음으로 i가 4일 때는 break를 만나게 되어 반복문이 종료가 됩니다. 이 상태에서 출력하게 되면 i는 4, s도 4가 출력되게 됩니다.


52. 다음은 C++ 소스 코드이다. 실행 결과를 쓰시오.

#include <iostream>
int fn(int n) {
  if( n <= 1 )
    return 1;
  else
    return n*fn(n-1);
}

void main() {
  std::cout << fn(4);
}


정답) 24

해설) 재귀함수는 좀 생소할 수 있기 때문에 상세히 설명해보겠습니다.
재귀함수는 말 그대로 자기가 자기 자신을 부르는 함수입니다.
프로그램은 무조건 main함수부터 시작하기 때문에 void main()안에 있는 명령어를 실행합니다.
std::cout << fn(4)이므로 fn(4)의 결과값을 출력해줍니다.
fn(4)는 fn이라는 함수를 호출할 때 4라는 값을 넘겨준다는 의미이고,
함수 선언부분이 int fn(int n)이므로 n은 4가 됩니다.
4일 경우 else문이 실행하게 되고 함수는 n*fn(n-1)을 반환하는데 n이 4이므로 4*fn(3)이 출력됩니다.
그럼 여기서 fn(3)을 호출해야 하는데 다시 int fn(int n)을 호출하고 이 때 n은 3이 됩니다. 역시 n은 n<=1이 아니므로 else를 실행하고 n*fn(n-1) 즉, 3*fn(2)가 반환됩니다. 그럼 fn(2)는 똑같이 n은 2가 되고, 또 else 문이 만족하므로 return 2*fn(1)이 됩니다. fn(1)은 if문에 만족하므로 1을 반환합니다.

 

여기서 fn(1)의 값은 1이고, fn(2)일 때 반환 값이 2*fn(1)이므로 2*1=2가 됩니다. fn(3)의 반환값은? 3*fn(2)이므로 3*2가 되어 6이 됩니다. fn(4)의 반환값은 뭐죠? 4*fn(3)인데 fn(3)이 6이라고 했으므로 4*6=24가 됩니다.

즉, fn(4)는 24가 되어 24가 결과값이 됩니다.


(11과목) 데이터베이스 기초 활용하기 - 53

1. 다음 SQL문의 실행결과를 쓰시오.

select sum(점수)
from 성적 a, 학생 b
where a.학번 = b.학번
and b.학년 = ‘1’;

학생 테이블

학번 이름 학년
20170001 강은미 4
20180002 김정미 3
20190003 홍길동 2
20200004 장길산 1
20200005 김철희 1

 

성적 테이블

학번 과목 점수
20190003 영어 90
20200004 영어 80
20200005 영어 90

 

) 170

 

해설) 

성적 테이블에서 점수 컬럼의 합계를 출력하라는 쿼리문이다

학생 테이블에서는 학번, 이름, 학년 컬럼이 있고, 성적 테이블에는 학번, 과목, 점수 컬럼이 있다.

주어진 SQL은 where 절에서 학생 테이블과 성적 테이블이 같으면서(조인연산) 1학년인 학생들 점수만

추출하도록 조건이 제시되어 있고 select 절에서는 점수의 합(sum)을 계산한다.

성적 테이블에서는 학번, 점수만 알수 있고, 학생 테이블에서는 학번, 학년을 알 수 있다. 

따라서 학생 테이블의 학번 컬럼과 성적 테이블의 학번 컬럼이 일치하는 값인 20190003, 20200004, 20200005 와 1학년인 20200004, 20200005 이 AND 가 되어야 하므로 최종적으로  학번이 20200004, 20200005 인 로우가 추출이 된다.

문제에서 요구하는 점수의 합계를 계산해야 하므로 학번 20200004의 80점과 학번 20200005의 90점의 합계를 구한다.


(10과목) 프로그래밍 활용 - 54

54. 다음은 C언어 소스코드이다. 출력 결과를 쓰시오.

#include <stdio.h>
int f(int i);
void main(){
  printf("%d %d %d", f(1), f(5), f(-2));
}

int f(int i){
  if(i<=2)
    return 1;
  else
    return f(i-1)+f(i-2);
}

 

정답) 1 5 1
해설) 이 문제 역시 재귀함수를 아는지 물어본 것이고, 함수 내에 자기 자신을 두 번 호출하는 경우입니다.
먼저 f(1)을 호출했을 경우 int f(int i)에서 i가 1이므로 (i<=2)조건을 만족해 return 1을 반환하므로 f(1)은 1을 출력합니다.

다음으로 f(5)를 호출했을 경우 입니다. int f(int i)에서 i가 5이므로 else문의 return f(i-1)+f(i-2)을 실행합니다. 즉 f(4)+f(3)을 반환하게 됩니다. 여기서 f(4)는 f라는 함수 반환 값이 f(3)+f(2)가 되겠죠. 여기서 f(3)은 f(2)+f(1)이 됩니다. f(2)일 경우 if문을 만족하여 1을 반환하므로 1이되고, f(1)도 마찬가지로 i가 if문을 만족하여 1을 반환합니다. 그러면 f(3)은 f(2)+f(1)을 반환한다고 했는데 f(2)와 f(1)이 1이므로 1+1해서 f(3)은 2를 반환합니다. f(4)는 f(3)+f(2)를 반환한다고 했는데 f(3)은 2였고, f(2)는 1이기 때문에 2+1해서 3이 됩니다. 마지막으로 처음 호출했던 f(5)는 f(4)+f(3)을 반환하게 되는데 f(4)에서 3을 반환하고, f(3)은 f(2)+f(1)이므로 1+1이 되어 2가 반환됩니다. 즉, f(5)는 3+2가 되어 5를 반환하고, 5를 출력합니다.

마지막으로 f(-2)을 호출했을 경우 int f(int i)에서 i가 -2이므로 (i<=2)조건을 만족해 return 1을 반환하므로 f(-2)은 1을 출력합니다.


(10과목) 프로그래밍 활용 - 55

55. 다음은 C언어 소스코드이다. 출력 결과를 쓰시오.

#include <stdio.h>
int hrd(int n) {
  if( n <= 0 )
    return 1;
  else
    printf("%d ", n);
 
  hrd(n-1);
}

int main() {
  hrd(5);

  return 0;
}

정답) 5 4 3 2 1
해설) 프로그래밍에서는 main함수부터 실행하게 되는데, 처음에 hrd(5)가 호출되게 됩니다. hrd 함수에 n이 5가 들어가게 되면 if문은 거짓이 되어 else문에 있는 printf가 실행되면서 5가 출력되고, 마지막에 hrd(n-1)이 실행되는데, n이 5였으므로 hrd(4)가 호출됩니다.
hrd(4)가 호출되면 hrd 함수에 n이 4가 들어가게 되면 else 문에 있는 printf가 실행되면서 4가 출력되고, hrd(4-1) 즉, hrd(3)이 호출됩니다.
hrd(3)이 호출되면 hrd 함수에 n이 3이 들어가게 되면 else 문에 있는 printf가 실행되면서 3이 출력되고, hrd(3-1) 즉, hrd(2)이 호출됩니다.
hrd(2)가 호출되면 hrd 함수에 n이 2가 들어가게 되면 else 문에 있는 printf가 실행되면서 2가 출력되고, hrd(2-1) 즉, hrd(1)이 호출됩니다.

hrd(1)이 호출되면 hrd 함수에 n이 1이 들어가게 되면 else 문에 있는 printf가 실행되면서 1이 출력되고, hrd(1-1) 즉, hrd(0)이 호출됩니다.
hrd(0)이 호출되면 hrd 함수에 n이 0이 들어가게 되면 if 문에 있는 return 1이 반환되면서 종료됩니다.


(9과목) 소프트웨어 개발 보안 구축 - 56

※ 2019년 이전 기출문제입니다.

56. 다음이 설명하는 용어를 쓰시오.

 

* 기업이 재해/재난으로부터 타격을 입은 뒤 업무를 어떻게 복구하는지에 대한 계획을 말한다.

* 전산의 단순복구 뿐 아니라 고객 비즈니스의 지속성을 보장한다.

* 재해 복구를 포함하는 더 넓은 개념으로 쓰인다.

 

정답) BCP(Business continuity Planning)

추가해설) BCP를 통해서 재해예방, 대응 및 복구, 운영 및 유지관리, 모의훈련을 합니다.

[같이 알아두면 좋은 용어]

* DRS: 재해/재난 시 서비스 연속성 보장을 위해 메인 센터와 분리되어 동일 역할을 하는 재해 복구 시스템입니다.
* RTO(Recovery Time Objective): 영어 해석 그대로 재해 복구 목표 시간입니다. 재해복구 목표 시간은 중요한 서비스일수록 짧아야 합니다. (예: 은행에서 계좌 이체 서비스 장애 발생 시 1분 이내 복구) - 2019년 이전 기출문제


(9과목) 소프트웨어 개발 보안 구축 - 57

57. 다음이 설명하는 용어를 쓰시오.

온라인 상에서 불법 활동을 조장하기 위해 만들어진 컴퓨터 프로그램이다. 공격용 툴킷이라고 불리며 보통 취약점을 이용하도록 미리 프로그램 된 악성코드 등으로 구성돼 원하는 형태로 공격을 감행하거나 공격을 자동화 할 수 있다. 인터넷에서 곧바로 사용할 수 있으며 키로거를 은밀히 설치 시켜 불법적으로 정보를 수집해 가기도 한다.

정답) 크라임웨어(crimeware)


(10과목) 프로그래밍 활용 - 58

58. 다음은 C++ 소스 코드이다. 출력 결과를 쓰시오.

#include <iostream>
using namespace std;
void main(){
  int a[5] = {1, 2};
  int s = 0;

  for(int i=2; i<4; i++){
    s += a[i];
  }

  cout << s;
}

정답) 0
해설) a라는 이름으로 배열 5개를 잡았는데, 초기 값으로 {1, 2}라고 되어 있습니다. 그러면 a의 0번째인 a[0] = 1, a의 1번째인 a[1] = 2가 되고 나머지 a[2], a[3], a[4]는 0으로 초기화된 것과 같습니다.

for문을 보시면 i가 2일 때부터 4보다 작을 때 동작하기 때문에 i가 2일 때 한 번, i가 3일 때 한 번 돌게 됩니다.

이 상황에서 a[2]의 값은 0, a[3]의 값은 0이기 때문에 0을 두 번 더하게 되어 s의 최종 값은 0이 됩니다.

참고로 C++, 자바에서는 변수를 아무곳에서나 선언할 수 있는데 for문 안에 int i=2; 부분이 i라는 변수를 생성한다는 것도 같이 봐주시면 좋을 것 같습니다.


 (10과목) 프로그래밍 활용 - 59

59. 다음은 C언어 소스코드이다. 밑줄에 알맞은 코드를 쓰시오. (단, 소스코드는 sum이라는 변수에 100개의 정수형 배열 a에 저장된 값들의 합을 구한다.)

#include <stdio.h>
void main(){
  int a[100] = {1, 2, 3, 4, 5};
  int sum = 0;

  int i;
  for(____________________){
    sum = sum + a[i];
  }

  printf("%d\n", sum);
}

 

정답)
i=0; i<100; i++ 또는
i=0; i<100; i=i+1 또는
i=0; i<=99; i++ 또는
i=99; i>=0; i-- 또는
i=99; i>-1; i-- 

포인트)
① i배열의 합을 구하면 되기 때문에 0부터 99까지 증가해도 되고, 99부터 0으로 감소해도 된다.
② 0부터 99까지 가능하기 때문에, i<100도 가능하고 i<=99도 가능하다. (감소일 경우에는 i>=0도 가능하고 i>-1도 가능하다.
③ 증가를 표현하기 위해 i++, ++i, i=i+1 모두 가능하다. (감소일 경우에는 i--, --i, i=i-1 모두 가능하다.)


(6과목) 화면 설계 - 60

60. UI 화면 설계를 위해서 정책이나 프로세스 및 콘텐츠의 구성, 와이어 프레임(UI, UX), 기능에 대한 정의, 데이터베이스의 연동 등 구축하는 서비스를 위한 대부분 정보가 수록된 문서로서, 디자이너와 개발자가 최종적으로 참고하는 산출 문서가 무엇인지 쓰시오.

정답) 스토리보드(Story Board)
해설) 수제비 정보처리기사 실기 6-20페이지