본문 바로가기
카테고리 없음

2021 정보처리기사 실기 3회 프로그래밍 문제 해설(1번, 11번, 12번)

by picker_life 2024. 3. 20.
반응형

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

해설

  1. Connection 클래스는 null로 초기화된 정적 비공개 인스턴스 _inst와, count 메소드가 호출된 횟수를 추적하기 위한 정수형 count, 그리고 클래스 외부에서의 인스턴스 생성을 방지하기 위한 비공개 생성자를 가지고 있다.
  2. get() 메소드는 Connection 클래스의 싱글턴 인스턴스를 반환하는 정적 공개 메소드이다. _inst가 null일 경우, 새로운 Connection 인스턴스가 생성되어 _inst에 할당됩니다; 그렇지 않다면, 기존 인스턴스가 반환된다.
  3. count() 메소드는 호출될 때마다 count를 1씩 증가시킨다.
  4. 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

해설

  1. 변수 초기화:
    • a = 3
    • b = 4
    • c = 3
    • d = 5
  2. 첫 번째 if 조건:
    • (a == 2 | a == c) -> false | true -> true (단순 OR 연산자)
    • !(c > d) -> !(3 > 5) -> true
    • (1 == b ^ c != d) -> false ^ true -> true (XOR 연산자, 두 피연산자가 다를 때만 true)
    첫 번째 if 문의 조건이 모두 참이므로 if문 위쪽으로 들어간다.
  3. a = b + c; -> a = 4 + 3; -> a = 7;
  4. 두 번째 if 조건 (첫 번째 if 블록 내부):
    • 7 == b ^ c != a -> 7 == 4 ^ 3 != 7 -> false ^ true -> true
    두 번째 if 문의 조건도 참이므로, System.out.println(a); 가 실행된다.

따라서, 이 코드의 출력값은 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이다.