정보처리기사[실기]

[JAVA] 21년 기출 문제 풀이 (1회 ~ 4회)

microsaurs 2024. 10. 11. 17:14

[21년 1회]

public class Main {
	public static void main(String[] args) {
    	int arr[][] = new int[][]{{45,50,75},{89}};
        System.out.println(arr[0].length);
        System.out.println(arr[1].length);
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[1][0]);
    }
}
더보기

정답

3

1

45

50

89

 

public class Main{
	public static void main(String[] args){
    	int i,j;
        for(j=0, i=0; j<=5; i++){
        	j += i;
            System.out.print(i);
            if(i==5){
            	System.out.print("=");
                System.out.print(j);
            } else {
            	System.out.print("+");
            }
        }
    }
}
더보기

정답

0+1+2+3+4+5=15


[21년 2회]

// (가)에 알맞은 예약어를 쓰시오

public class Main{
	public static void maing(String[] args){
    	System.out.print(Main.check(1));
    }
    
    (가) String check (int num){
    	return (num >= 0) ? "positive" : "negative";
    }
}
더보기

정답 : static

 

Main 클래스에서 직접 호출하고 있기 때문에 static 키워드 필요

* static이 붙은 메서드는 인스턴스를 생성하지 않고도 직접 호출 가능 

 

public class ovr1{
    public static void main(String[] args){
        ovr1 a1 = new ovr1();
        ovr2 a2 = new ovr2();
        System.out.println(a1.sun(3,2) + a2.sun(3,2));
    }
    
    int sun(int x, int y){
    	return x + y;
    }
}

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

[21년 3회]

class Connection {
    private static Connection _inst = null;
    private int count = 0;

    public static Connection get() {
        if(_inst == null) {
            _inst = new Connection();
            return _inst;
        }
        return _inst;
    }
    public void count() { count++; }
    public int getCount() { return count;}
}

public class Main {
	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());
    }
}
더보기

정답 : 3

 

* 싱글톤 패턴 (Singleton Pattern)

→ 객체 지향 프로그래미에서 특정 클래스가 단 하나만의 인스턴스를 생성하여 사용하기 위한 패턴

: 불필요한 자원 사용을 방지하고,  생성된 하나의 객체를 전역에서 공유하고 사용할 수 있게 하기 위해 싱글톤 패턴 사용

 

[풀이]

클래스 Connection

  1. private static Connection _inst = null;:
    • Connection 클래스의 정적 필드 _inst는 이 클래스의 유일한 인스턴스를 저장
    • 초기에는 null로 설정되어 있으며, 인스턴스가 생성되면 그 인스턴스를 이 변수에 저장
  2. public static Connection get():
    • 이 정적 메서드는 클래스의 유일한 인스턴스를 반환
    • 만약 인스턴스가 아직 생성되지 않았다면, 새로운 Connection 객체를 생성, 그 객체를 _inst에 저장한 후 반환
    • 이미 인스턴스가 존재한다면, 새로 생성하지 않고 기존 인스턴스를 그대로 반환
  3. public void count():
    • count라는 정수형 필드를 1씩 증가시키는 메서드
  4. public int getCount():
    • 현재 count 값(증가된 값)을 반환

클래스 Main:

  1. Connection conn1 = Connection.get();:
    • conn1이라는 Connection 객체 참조 변수를 선언하고, Connection.get()을 호출하여 Connection 인스턴스 가져옴
    • 이때 인스턴스가 처음 생성
  2. conn1.count();:
    • conn1의 count 메서드를 호출하여 count 값을 1 증가
  3. Connection conn2 = Connection.get();:
    • conn2도 Connection.get()을 호출하여 Connection 인스턴스를 가져오는데 이때는 이미 인스턴스가 생성되어 있으므로 새로 생성하지 않고 기존의 인스턴스를 반환 
    • 즉, conn2는 conn1과 동일한 객체를 참조
  4. conn2.count();:
    • conn2로 호출했지만, 실제로는 동일한 인스턴스이므로 count 값이 1 증가
  5. Connection conn3 = Connection.get();:
    • 마찬가지로 conn1과 conn2와 같은 객체를 참조
  6. conn3.count();:
    • 동일한 인스턴스에서 count 값을 1 증가
  7. System.out.print(conn1.getCount());:
    • conn1.getCount()로 현재 count 값을 출력
    • conn1, conn2, conn3 모두 동일한 인스턴스를 참조하므로 count 값은 3

 

public class Main{
    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);
            }
        }
    }
}
더보기

정답 : 7

[풀이]

if ((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)) 

1. (a = 2 | a == c)

✔️ " | " : 비트 OR 연산자 = 두 값 중 하나라도 참이면 전체가 참

a == 2 false, a == c → true 

➡️ true

 

2. !(c > d)

c > d → false , !(false) → true

➡️ true

 

3. (1 == b ^ c != d)

✔️ " ^ " : 논리 XOR 연산자 = 두 값이 다를 때 true

1 == b → false , c != d → true 

➡️ true

 

if( ture & true & true ) ➡️ true 이므로 첫번째 블록 실행