Tech Trail

[정보처리기사 실기] 2021년 2회 기출 코드 해설 (C언어, Java, Python) 본문

Learning/정보처리기사

[정보처리기사 실기] 2021년 2회 기출 코드 해설 (C언어, Java, Python)

_밍지_ 2023. 11. 16. 08:56
728x90
반응형
SMALL

2021년 2회 3번 문제

다음은 파이썬 코드이다. 출력 결과를 쓰시오.

a = 100
i = 0
result = 0
for i in range(1, 3):
    result = a >> i
    result += 1

print(result)
  1. 정수 변수 a에 100을 할당합니다. 정수 변수 i에 0을 할당합니다.
  2. result = 0: 정수 변수 result에 0을 할당합니다. 이 변수는 결과값을 저장할 용도로 사용됩니다.
  3. for i in range(1, 3):: 반복문을 시작합니다. i는 1부터 2까지 반복합니다. 즉, 첫 번째 반복에서 i는 1, 두 번째 반복에서 i는 2가 됩니다.
  4. result = a >> i: 현재의 a 값을 i 비트만큼 오른쪽으로 시프트한 결과를 result에 할당합니다. >>는 비트 오른쪽 시프트 연산자이며, 오른쪽으로 시프트하면 값을 나누기 2의 거듭제곱만큼 줄이는 효과가 있습니다.
  5. result += 1: result에 1을 더합니다.
  • 첫 번째 반복에서는 i가 1이므로 a는 100을 1번 오른쪽으로 시프트하여 50이 됩니다. (100>>1는 100을 2의 1승(2^1)으로 나누는 것과 같습니다.)
  • result는 50에 1을 더해 51이 됩니다.
  • 두 번째 반복에서는 i가 2이므로 a는 100을 2번 오른쪽으로 시프트하여 25가 됩니다. (100 >> 2는 100을 2의 2승(4)으로 나누는 것과 같습니다.)
  • result는 25에 1을 더해 26이 됩니다.

<출력>

26

 

2021년 2회 5번 문제

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

#include <stdio.h>

void main() {
    int ary[3] = {1};
    int s = 0;
    int i = 0;

    ary[1] = *(ary + 0) + 2;
    ary[2] = *ary + 3;

    for (i = 0; i < 3; i++) {
        s = s + ary[i];
    }

    printf("%d", s);
}

1. 배열 선언 및 초기화

  • int ary[3] = {1};에서 크기가 3인 정수형 배열 ary를 선언하고, 첫 번째 요소를 1로 초기화합니다. 나머지 요소는 자동으로 0으로 초기화됩니다.

2. 배열 요소 값 설정

  • ary[1] = *(ary + 0) + 2;에서 ary 배열의 두 번째 요소(ary[1])에 값을 설정합니다. 이 값은 ary 배열의 첫 번째 요소(ary[0]) 값에 2를 더한 값입니다. 따라서 ary[1]에는 1 + 2 = 3이 저장됩니다.
  • ary[2] = *ary + 3;에서 ary 배열의 세 번째 요소(ary[2])에 값을 설정합니다. 이 값은 ary 배열의 첫 번째 요소(ary[0]) 값에 3을 더한 값입니다. 따라서 ary[2]에는 1 + 3 = 4가 저장됩니다.

3. 반복문

  • for (i = 0; i < 3; i++) 변수 i를 0부터 2까지 반복합니다.
  • s = s + ary[i]; 배열 ary의 요소들을 순회하며 각 요소 값을 변수 s에 누적합니다.

4. 결과 출력

  • printf("%d", s); 변수 s의 최종 값을 정수 형식으로 출력합니다.
8

코드 실행 결과는 ary 배열의 모든 요소를 더한 값인 1 + 3 + 4 = 8이 출력됩니다.

 

2021년 2회 10번 문제

다음은 자바 코드이다. 출력 결과를 쓰시오.

class ovr1 {
    public static void main(String[] args) {
        ovr1 a1 = new ovr1();
        ovr2 a2 = new ovr2();

        System.out.print(a1.san(3, 2) + a2.san(3, 2));
    }

    int san(int x, int y) {
        return x + y;
    }
}

class ovr2 extends ovr1 {
    int san(int x, int y) {
        return x - y + super.san(x, y);
    }
}

1. ovr1 클래스와 ovr2 클래스 정의

  • ovr1 클래스는 메서드 san을 정의하고 있습니다. 이 메서드는 두 개의 정수를 입력받아 더한 값을 반환합니다.
  • ovr2 클래스는 ovr1 클래스를 상속하고 있으며, san 메서드를 오버라이딩(재정의)하고 있습니다. 이 오버라이딩된 메서드는 부모 클래스의 san 메서드를 호출하면서 입력된 두 정수를 뺀 후, 부모 클래스의 san 메서드의 결과를 더하여 반환합니다.

2. main 메서드

  • public static void amain(String[] args) 메서드는 프로그램의 진입점입니다.
  • ovr1 클래스의 인스턴스 a1ovr2 클래스의 인스턴스 a2를 생성합니다.
  • a1.san(3, 2)ovr1 클래스의 san 메서드를 호출하여 3과 2를 더한 결과인 5를 반환합니다.
  • a2.san(3, 2)ovr2 클래스의 san 메서드를 호출하며, 이 때 오버라이딩된 메서드가 실행됩니다. 먼저 3과 2를 빼서 1을 얻고, super.san(x, y)를 통해 부모 클래스인 ovr1san 메서드를 호출하여 3과 2를 더한 결과인 5를 얻습니다. 따라서 최종적으로 1 + 5 = 6을 반환합니다.

3. 결과 출력

  • System.out.print(a1.san(3, 2) + a2.san(3, 2));a1.san(3, 2)의 결과와 a2.san(3, 2)의 결과를 더한 값을 출력합니다. 따라서 출력 결과는 5 + 6 = 11이 됩니다.
11

 

2021년 2회 11번 문제

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

#include <stdio.h>

// 함수 Soojebi 정의: base의 exp 제곱을 계산하여 반환
int Soojebi(int base, int exp) {
    int i, result = 1;
    for (i = 0; i < exp; i++)
        result *= base;
    return result;
}

// main 함수 시작
int main() {
    // Soojebi 함수 호출: base=2, exp=10
    int result = Soojebi(2, 10);
    // 결과 출력
    printf("%d", result);
}
  1. main 함수에서 result라는 정수형 변수를 만듭니다.
  2. Soojebi 함수를 호출할 때 base에 2와 exp에 10을 넘깁니다.
  3. Soojebi 함수 내부에서 for 루프를 사용하여 i를 0부터 시작하여 exp (즉, 10)보다 작을 때까지 반복합니다.
  4. 각 반복에서 resultbase를 곱해야 합니다.
  5. Soojebi(2, 10)을 계산할 때:
  • 초기에 result는 1입니다. result = result * base = result * 2
  • 첫 번째 반복 (i=0): result = 1 * 2 = 2가 됩니다.
  • 두 번째 반복 (i=1): result = 2 * 2 = 4가 됩니다.
  • 세 번째 반복 (i=2): result = 4 * 2 = 8이 됩니다.
  • ...
  • 열 번째 반복 (i=9): result = 512 * 2 = 1024가 됩니다.

따라서 Soojebi(2, 10)의 결과는 1024가 됩니다. 이 코드는 주어진 base를 주어진 지수(exp)만큼 제곱하는 기능을 수행합니다.

<출력>

1024

 

2021년 2회 16번 문제

다음은 자바 코드이다. 빈칸에 들어갈 키워드를 쓰시오.

public class Soojebi {
    public static void main(String[] args) {
        System.out.print(Soojebi.check(1));
    }

    빈칸 String check(int num) {
        return (num >= 0) ? "positive" : "negative";
    }
}

객체 생성 없이 메서드를 사용하기 위해서는 static이라는 키워드를 사용하여 메서드를 선언합니다.

check 메서드를 static으로 선언하면, 인스턴스를 생성하지 않고도 Soojebi.check(1)과 같이 호출할 수 있게 됩니다. 이것은 해당 메서드가 객체에 속하지 않고 클래스 자체에 속한다는 것을 의미합니다.

<답>

public class Soojebi {
    public static void main(String[] args) {
        System.out.print(Soojebi.check(1));
    }

    static String check(int num) {
        return (num >= 0) ? "positive" : "negative";
    }
}

<참고> 클래스를 객체로 생성할 때 Java에서는 다음과 같은 구문을 사용합니다

A a = new A();
a.check();

객체 변수 a에 클래스 A의 인스턴스를 생성하고, 그 다음에 a.check()와 같이 객체의 메서드를 호출할 수 있습니다.

그렇다면 객체 생성을 통해 Soojebi 클래스의 check 메서드를 호출하려면 어떻게 수정해야할까요?

public class Soojebi {
    public static void main(String[] args) {
        Soojebi soojebi = new Soojebi(); // Soojebi 클래스의 인스턴스 생성
        System.out.print(soojebi.check(1)); // 인스턴스를 통해 check 메서드 호출
    }

    String check(int num) { // check 메서드를 인스턴스 메서드로 변경
        return (num >= 0) ? "positive" : "negative";
    }
}

이제 Soojebi 클래스의 check 메서드는 객체 인스턴스를 통해 호출됩니다.

 

 

💡 이 게시글은 PC 환경에 최적화하여 작성되었습니다.

💡 위 내용은 수제비 정보처리기사 실기 FINAL 실전 모의고사 기출 문제를 직접 풀고 정리한 것입니다.

틀린 부분이 있다면 언제든 댓글 남겨주세요 :)

728x90
반응형
LIST