반응형
2021 정보처리기사 실기 3회 1번
문제
1. Java 코드 출력값
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
|
class Connection {
private static Connection _inst = null;
private int count = 0;
static public Connection get() {
if(_inst == null) {
_inst = new Connection();
return _inst;
}
return _inst;
}
public void count() { count ++; }
public int getCount() { return count; }
}
public class testcon {
public static void main(String[] args) {
Connection conn1 = Connection.get();
conn1.count();
Connection conn2 = Connection.get();
conn2.count();
Connection conn3 = Connection.get();
conn3.count();
System.out.print(conn1.getCount());
}
}
|
cs |
정답
3
해설
- Connection 클래스는 null로 초기화된 정적 비공개 인스턴스 _inst와, count 메소드가 호출된 횟수를 추적하기 위한 정수형 count, 그리고 클래스 외부에서의 인스턴스 생성을 방지하기 위한 비공개 생성자를 가지고 있다.
- get() 메소드는 Connection 클래스의 싱글턴 인스턴스를 반환하는 정적 공개 메소드이다. _inst가 null일 경우, 새로운 Connection 인스턴스가 생성되어 _inst에 할당됩니다; 그렇지 않다면, 기존 인스턴스가 반환된다.
- count() 메소드는 호출될 때마다 count를 1씩 증가시킨다.
- getCount() 메소드는 단순히 count의 값을 반환한다.
testcon 클래스에서는 Connection의 싱글턴 인스턴스를 세 번 (conn1, conn2, conn3) 가져온다. 하지만 싱글턴 패턴 때문에 이 세 참조는 모두 같은 인스턴스를 가리킨다.
conn1.count(), conn2.count(), conn3.count()를 각각 호출할 때마다 단일 Connection 인스턴스의 count가 증가한다. 따라서 세 호출 후에는 count가 3이 된다.
결론적으로, conn1.getCount() (또는 conn2.getCount(), conn3.getCount()를 호출하는 것과 동일하다. 왜냐하면 conn1, conn2, conn3은 모두 같은 인스턴스를 참조하기 때문) 을 최종적으로 호출하면 출력 값은 3이 된다.
2021 정보처리기사 실기 3회 11번
문제
11. Java 코드 출력값
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class testco {
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 ^ d != a) {
System.out.println(a);
} else {
System.out.println(d);
}
}
}
}
|
cs |
정답
7
해설
- 변수 초기화:
- a = 3
- b = 4
- c = 3
- d = 5
- 첫 번째 if 조건:
- (a == 2 | a == c) -> false | true -> true (단순 OR 연산자)
- !(c > d) -> !(3 > 5) -> true
- (1 == b ^ c != d) -> false ^ true -> true (XOR 연산자, 두 피연산자가 다를 때만 true)
- a = b + c; -> a = 4 + 3; -> a = 7;
- 두 번째 if 조건 (첫 번째 if 블록 내부):
- 7 == b ^ c != a -> 7 == 4 ^ 3 != 7 -> false ^ true -> true
따라서, 이 코드의 출력값은 7 이다.
2021 정보처리기사 실기 3회 12번
문제
12. C언어 출력값
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <stdio.h>
int 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);
}
|
cs |
정답
37
해설
이 코드는 포인터 배열을 사용하여 정수 변수의 주소를 저장하고 있다. 각각의 포인터 arr[0], arr[1], arr[2]는 각각 a, b, c의 주소를 가리키고 있다.
- a = 12
- b = 24
- c = 36
프린트문 printf("%d\n", *arr[1] + **arr + 1); 에서의 계산은 다음과 같이 진행된다
- *arr[1]는 arr[1]이 가리키는 주소의 값, 즉 b의 값인 24이다.
- **arr는 arr[0]이 가리키는 주소의 값, 즉 a의 값인 12이다.
- 따라서 *arr[1] + **arr + 1은 24 + 12 + 1이 되어 37이다.