일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 기사자격증
- 리눅스자격증
- SW
- 리눅스마스터2급2차
- IT
- 정보처리기사실기
- python
- 코딩
- 리눅스활용
- AI
- 정처기기출
- 장고
- 리눅스마스터2급
- IT자격증
- 정보처리기사
- 리눅스명령어
- 머신러닝
- 정처기실기
- 프로그래밍
- C
- 정보처리기사기출
- Linux
- 공부블로그
- 웹개발
- 정처기
- 리눅스
- Java
- Django
- 자격증
- 리눅스마스터
- Today
- Total
Tech Trail
[정보처리기사 실기] 2021년 3회 기출 코드 해설 (C언어, Java, Python) 본문
2021년 3회 1번 문제
다음은 자바 코드이다. 출력 결과를 쓰시오.
class Soojebi {
static private Soojebi instance = null; // 정적(private) 멤버 변수로 싱글톤 객체를 저장
private int count = 0; // 객체의 상태를 나타내는 멤버 변수
// 외부에서 객체를 생성하는 것을 막기 위해 생성자를 private로 선언
private Soojebi() {}
// 정적(public) 메서드를 통해 싱글톤 객체에 접근하고 생성
static public Soojebi get() {
if (instance == null) {
instance = new Soojebi(); // 처음 호출 시에만 객체 생성
}
return instance; // 이미 생성된 객체 반환
}
// 객체의 상태(count)를 증가시키는 메서드
public void count() {
count++;
}
// 객체의 상태(count)를 반환하는 메서드
public int getCount() {
return count;
}
}
public class Soojebi2 {
public static void main(String[] args) {
Soojebi s1 = Soojebi.get(); // 싱글톤 객체 생성 또는 기존 객체 반환
s1.count(); // 상태(count)를 증가시킴
Soojebi s2 = Soojebi.get(); // 싱글톤 객체 재사용
s2.count(); // 상태(count)를 증가시킴
Soojebi s3 = Soojebi.get(); // 싱글톤 객체 재사용
s3.count(); // 상태(count)를 증가시킴
System.out.print(s1.getCount()); // 상태(count) 출력, 결과는 3
}
}
코드에서 Soojebi 클래스가 싱글톤 패턴을 따르고 있습니다.
- Soojebi 클래스는 생성자(private Soojebi())를 private으로 선언하여 외부에서 객체를 직접 생성할 수 없게 합니다.
- 정적 메서드인 get()을 사용하여 싱글톤 객체에 접근하고 객체를 생성합니다. 만약 이미 객체가 생성되어 있다면 기존 객체를 반환합니다.
- Soojebi.get() 메서드를 사용하여 Soojebi 객체를 얻고, count() 메서드를 호출하여 상태를 1씩 증가시킵니다.
- getCount() 메서드를 사용하여 객체의 상태를 출력하면, 세 번의 count() 호출로 인해 상태가 3이 출력됩니다.
<출력>
3
이렇게 싱글톤 패턴을 사용하면 한 번의 객체 생성만으로 여러 곳에서 동일한 객체를 공유하고 데이터를 일관되게 유지할 수 있습니다.
2021년 3회 11번 문제
다음은 자바 코드이다. 출력 결과를 쓰시오.
public class Soojebi {
public static void main(String[] args) {
int a = 3, b = 4, c = 3, d = 5;
if ((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)) {
a = b + c;
if (7 == b ^ c != a) {
System.out.println(a);
} else {
System.out.println(b);
}
} else {
a = c + d;
if (7 == c ^ b != a) {
System.out.println(a);
} else {
System.out.println(d);
}
}
}
}
- (a == 2 | a == c): 먼저, a == 2는 3 == 2이므로 False입니다. a == c에서 3 == 3은 True입니다. | (OR) 연산자가 있으므로 (a == 2 | a == c)는 True입니다.
- !(c > d): c > d에서 3 > 5는 False이지만 ! (NOT) 연산자가 있으므로 !(c > d)는 True입니다.
- (1 == b ^ c != d): 1 == b에서 1 == 4는 False입니다. c != d에서 3과 5는 같지 않으므로 True입니다. ^ (Exclusive OR) 연산자가 있으므로 (1 == b ^ c != d)는 True가 됩니다.
- 따라서, ((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d))는 True이므로 if문 블록이 실행됩니다.
- a = b + c로 계산하면 4 + 3으로 a는 7이 됩니다.
- if문에서 7 == b에서 7 == 4는 False입니다. c != a에서 3과 7은 같지 않으므로 True입니다. ^(Exclusive OR)를 하면 최종적으로 (7 == b ^ c != a)는 True가 되므로 System.out.println(a);가 실행됩니다.
- 따라서, a의 값인 7이 출력됩니다.
<출력>
7
2021년 3회 12번 문제
다음은 C언어 코드이다. 출력 결과를 쓰시오.
#include <stdio.h>
void main() {
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1);
}
- int *arr[3]; 라인에서 int형 포인터 배열 arr을 선언합니다. arr은 세 개의 포인터를 저장할 수 있는 배열입니다.
- int a = 12, b = 24, c = 36; 라인에서 세 개의 정수형 변수 a, b, c를 선언하고 초기값을 설정합니다.
- arr[0] = &a;, arr[1] = &b;, arr[2] = &c; 라인에서 포인터 배열 arr의 각 원소에 변수 a, b, c의 주소를 할당합니다. 즉, arr[0]은 a의 주소를, arr[1]은 b의 주소를, arr[2]는 c의 주소를 가리키게 됩니다.
- printf("%d\n", arr[1] + **arr + 1); 라인에서 다음의 식을 계산하여 출력합니다.
- arr[1]은 두 번째 요소인 b의 주소를 가리킵니다.
- *arr[1]은 b의 값을 가리키므로 24가 됩니다. (* 연산자는 포인터의 값을 가리키는 역할을 합니다.)
- *arr은 포인터 배열 arr의 첫 번째 요소인 arr[0], 즉 a의 주소를 가리키고, **arr은 arr 배열의 첫 번째 요소인 arr[0]의 값, 즉 a의 값을 가리켜 12가 됩니다.
- 따라서 arr[1] + **arr는 &b + 12가 되며, 이는 b의 주소에 12를 더한 값을 나타냅니다.
- 마지막으로 1을 더하면 최종적으로 37이 됩니다.
<출력>
37
2021년 3회 14번 문제
다음은 파이썬 코드이다. 출력 결과를 쓰시오.
a, b = 100, 200
print(a==b)
a는 100, b는 200이므로 두 값은 서로 다릅니다.
따라서 a==b는 False가 되고, 이 결과가 화면에 출력됩니다.
<출력>
False
2021년 3회 17번 문제
다음은 C언어 코드이다. 출력 결과를 쓰시오.
#include <stdio.h>
struct Soojebi {
char name[20];
int os, db, hab1, hab2;
};
void main() {
struct Soojebi s[3] = {
{"데이터1", 95, 88},
{"데이터2", 84, 91},
{"데이터3", 86, 75}
};
struct Soojebi *p;
p = &s[0];
(p+1)->hab1 = (p+1)->os + (p+2)->db;
(p+1)->hab2 = (p+1)->hab1 + p->os + p->db;
printf("%d\n", (p+1)->hab1 + (p+1)->hab2);
}
- 구조체 정의
struct Soojebi {
char name[20];
int os, db, hab1, hab2;
};
Soojebi라는 구조체를 정의합니다.
이 구조체는 name, os, db, hab1, hab2라는 다섯 가지 멤버를 가집니다.
2. 배열 초기화
struct Soojebi s[3] = {
{"데이터1", 95, 88},
{"데이터2", 84, 91},
{"데이터3", 86, 75}
};
크기가 3인 Soojebi 구조체 배열 변수 3을 선언하고 각각 초기화합니다.
- s[0]의 name은 "데이터1", os는 95, db는 88, hab1은 0, hab2는 0이 됩니다.
- s[1]의 name은 "데이터2", os는 84, db는 91, hab1은 0, hab2는 0이 됩니다.
- s[2]의 name은 "데이터3", os는 86, db는 75, hab1은 0, hab2는 0이 됩니다.
3. 포인터 변수 선언과 초기화
struct Soojebi *p;
p = &s[0];
Soojebi 구조체를 가리키는 포인터 변수 p를 선언하고, 이를 s[0]의 주소로 초기화합니다.
따라서 p는 s[0], (p+1)는 s[1], (p+2)는 s[2]의 주소를 가리키게 됩니다.
4. 구조체 멤버 값 설정
(p+1)->hab1 = (p+1)->os + (p+2)->db;
(p+1)->hab2 = (p+1)->hab1 + p->os + p->db;
이 부분에서는 구조체 멤버인 hab1과 hab2의 값을 설정합니다.
(p+1)은 포인터 p가 가리키는 구조체의 다음 구조체를 가리킵니다. (p+1)->os는 다음 구조체의 os 멤버를 나타내며, (p+2)->db는 그 다음 구조체의 db 멤버를 나타냅니다.
- (p+1)->os값 84와 (p+2)->db값 75를 합한 값 159를 (p+1)->hab1 변수에 대입합니다.
- (p+1)->hab1 변숫값 159와 p->os값 95, p->db값 88을 합한 값인 342를 (p+1)->hab2에 대입합니다.
5. 결과 출력
printf("%d\n", (p+1)->hab1 + (p+1)->hab2);
최종적으로 (p+1)->hab1과 (p+1)->hab2의 합계를 계산하고 출력합니다.
(p+1)->hab1은 84 + 75 = 159이 되고, (p+1)->hab2는 159 + 95 + 88 = 342가 됩니다.
따라서 출력 결과는 159 + 342 = 501이 됩니다.
501
💡 이 게시글은 PC 환경에 최적화하여 작성되었습니다.
💡 위 내용은 수제비 정보처리기사 실기 FINAL 실전 모의고사 기출 문제를 직접 풀고 정리한 것입니다.
틀린 부분이 있다면 언제든 댓글 남겨주세요 :)
'IT Learning > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 2022년 2회 기출 코드 해설 (C언어, Java, Python) (2) | 2023.11.16 |
---|---|
[정보처리기사 실기] 2022년 1회 기출 코드 해설 (C언어, Java, Python) (2) | 2023.11.16 |
[정보처리기사 실기] 2021년 2회 기출 코드 해설 (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 |