일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 정처기실기
- Linux
- 정처기
- 웹개발
- 정보처리기사실기
- C
- SW
- 리눅스활용
- 기사자격증
- 장고
- 리눅스
- 리눅스마스터2급
- 정처기기출
- 프로그래밍
- 정보처리기사
- AI
- Django
- 공부블로그
- python
- 코딩
- 머신러닝
- 리눅스자격증
- 정보처리기사기출
- 리눅스마스터2급2차
- Java
- 리눅스명령어
- IT
- 자격증
- 리눅스마스터
- IT자격증
- Today
- Total
Tech Trail
[정보처리기사 실기] 2021년 2회 기출 코드 해설 (C언어, Java, Python) 본문
2021년 2회 3번 문제
다음은 파이썬 코드이다. 출력 결과를 쓰시오.
a = 100
i = 0
result = 0
for i in range(1, 3):
result = a >> i
result += 1
print(result)
- 정수 변수 a에 100을 할당합니다. 정수 변수 i에 0을 할당합니다.
- result = 0: 정수 변수 result에 0을 할당합니다. 이 변수는 결과값을 저장할 용도로 사용됩니다.
- for i in range(1, 3):: 반복문을 시작합니다. i는 1부터 2까지 반복합니다. 즉, 첫 번째 반복에서 i는 1, 두 번째 반복에서 i는 2가 됩니다.
- result = a >> i: 현재의 a 값을 i 비트만큼 오른쪽으로 시프트한 결과를 result에 할당합니다. >>는 비트 오른쪽 시프트 연산자이며, 오른쪽으로 시프트하면 값을 나누기 2의 거듭제곱만큼 줄이는 효과가 있습니다.
- 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 클래스의 인스턴스 a1과 ovr2 클래스의 인스턴스 a2를 생성합니다.
- a1.san(3, 2)는 ovr1 클래스의 san 메서드를 호출하여 3과 2를 더한 결과인 5를 반환합니다.
- a2.san(3, 2)는 ovr2 클래스의 san 메서드를 호출하며, 이 때 오버라이딩된 메서드가 실행됩니다. 먼저 3과 2를 빼서 1을 얻고, super.san(x, y)를 통해 부모 클래스인 ovr1의 san 메서드를 호출하여 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);
}
- main 함수에서 result라는 정수형 변수를 만듭니다.
- Soojebi 함수를 호출할 때 base에 2와 exp에 10을 넘깁니다.
- Soojebi 함수 내부에서 for 루프를 사용하여 i를 0부터 시작하여 exp (즉, 10)보다 작을 때까지 반복합니다.
- 각 반복에서 result에 base를 곱해야 합니다.
- 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 실전 모의고사 기출 문제를 직접 풀고 정리한 것입니다.
틀린 부분이 있다면 언제든 댓글 남겨주세요 :)
'IT Learning > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 2022년 1회 기출 코드 해설 (C언어, Java, Python) (2) | 2023.11.16 |
---|---|
[정보처리기사 실기] 2021년 3회 기출 코드 해설 (C언어, Java, Python) (0) | 2023.11.16 |
[정보처리기사 실기] 2021년 1회 기출 코드 해설 (C언어, Java, Python) (0) | 2023.11.16 |
[정보처리기사 실기] 2020년 3회, 4회 기출 코드 해설 (C언어, Java, Python) (0) | 2023.11.10 |
[정보처리기사 실기] 2020년 1회, 2회 기출 코드 해설 (C언어, Java, Python) (0) | 2023.11.10 |