본문 바로가기

Daily/TIL

20240324 정처기 java 기출 공부

 

20년 1회 4번 출력 결과

class Main {  
  static int[] arr() { 
    int a[]=new int[4];
    int b = a.length;
    for(int i =0; i<b;i++)
      a[i]=i;
    return a;
  } 

  public static void main(String args[]) { 
 	int a[]=arr();
  	for(int i =0; i< a.length; i++)
   		System.out.print(a[i]+" ");
  	} 
}

정답: 1 2 3 4

20년 2회 5번 (가)에 들어갈 알맞은 답을 쓰시오

class Parent{
    void show(){System.out.println("parent");}
}
class Child extends Parent{
    void show() {System.out.println("child");}
}

class Main {
    public static void main(String args[]) {
        Parent pa=(가) Child();
        pa.show();
    }
}

정답: new 

20년 2회 19번 출력 결과

class A{
	private int a;
    public A(int a){
    	this.a = a;
    }
    public void display(){
    	System.out.println("a=" + a);
    }
}
class B extends A {
	public B(int a){
    	super(a);
        super.display();
    }
}
public class Main {
	public static void main(String[] args){
    	B obj = new B(10);
    }
}

정답:a=10

20년 3회 2번 출력 결과

public class Main{
    public static void main(String[] args){
        int i=0, c=0;
        while (i<10){
         i++;
         c*=i;
        }
        System.out.println(c);
   }
 }

정답:0
풀이: 0을 곱하니까 c는 0


20년 3회 15번 출력 결과

abstract class Vehicle{
    String name;
    abstract public String getName(String val);
    public String getName(){
        return "Vehicle name:" + name;
    }
}

class Car extends Vehicle{
  private String name;
    public Car(String val){
        name=super.name=val;
   }
public String getName(String val){
    return "Car name : " + val;
   }
public String getName(byte val[]){
    return "Car name : " + val;
   }
}

public class Main {
    public static void main(String[] args){
    Vehicle obj = new Car("Spark");
    System.out.print(obj.getName());
    }
}

정답: Vehicle name : Spark
풀이:

1.Vehicle obj = new Car("Spark");

  • Car 클래스 호출 (Vehicle을 확장하고 있는 클래스)

2.Car extend Vehicle

  • public Car(String val){    getName(val);   }
  • Car 클래스 안에 Car 메소드에 val(=Spark)값이 들어감
  • setName은 부모 클래스인 Vehicle 클래스에 있는 메소드인데 extends Vehicle 때문에 Car 클래스에서 부모 클래스의 메소드를 그대로 쓸 수 있음

3. Vehicle

3-1. public void getName(String val){     name = val;    }

  • 2번에서 setName(val) 호출할 때 Vehicle의 setName 수행되면서 Vehicle 에서만 쓸 수 있는 private String 객체인 name 값에 val(=Spark)가 담겨짐
  • private String name (name = Spark)

여기까지가 Vehicle obj = new Car("Spark"); 실행했을 때의 결과임

4. System.out.println(obj.getName());

  • obj는 Car 클래스이다
  • Car 클래스 내에는 getName() 이라는, ()를 매개변수로 받는 메소드는 없고, 부모 클래스에 해당 메소드가 존재하므로, “부모 클래스(Vehicle)”에 있는 getName()이 실행된다.

4-1. public String getName(){     return "vehicle name:" + name;    }

  • name : 위에 3-1에서 private String name에 Spark가 들어가 있다
    ==> 반환값은 “vehicle name:” + name(=Spark);가 된다

5. 결과

  • System.out.print(obj.getName());
    • vehicle name:Spark

** 추가로, 부모 클래스 Vehicle에 abstract public String getName(String val); 이 있는데,

  • 부모 클래스는 추상 클래스이다.
  • 추상 클래스를 상속받는 자식 클래스는 부모 추상 클래스에 있는 추상 메소드를 반드시 구현해야 한다.

20년 3회 17번 출력 결과

public class Main {
    public static void main(String[] args){
    int i=0, sum=0;
    while (i<10){
        i++;
        if(i%2 ==1)
            continue;
        sum += i;
     }
     System.out.println(sum);
   }
}

정답:30
풀이: 2+4+6+8+10
i=9일 때 i++ 하고 sum에 10을 더함 

20년 4회 7번 다음은 변수 n에 저장된 10진수를 2진수로 변환하여 출력하는 java프로그램이다. 프로그램을 분석하여 ( 1번 )( 2번 )빈칸에 알맞은 답을 쓰시오

class Main {
    public static void main (String[] args) {
        int[]a = new int[8];
        int i=0; int n=10;
        while (  1번 ) {
            a[i++] = ( 2번 );
            n /= 2;
        }
        for(i=7; i>=0; i--){
         System.out.print(a[i]);
        }
     }

정답:(1) n/2 > 0 (2) n%2
풀이:

20년 4회 8번 가, 나의 답을 쓰시오.

 

public class Main {
    public static void main(String[] args) {
        int ary[][] = new int[가][나];

        for(int i = 0; i <3; i++){
            for(int j=0; j < 5; j++){
                ary[i][j] = j*3+(i+1);
                    System.out.print(ary[i][j]+"");
                 }
                 System.out.println();
           }
         }
   }

정답: (가) 3(나) 5
풀이:

20년 4회 19번 출력 결과

class Parent{
    public int compute(int num){
        if(num <=1) return num;
        return compute(num-1) + compute(num-2);
    }
 }

 class Child extends parent {
     public int compute(int num){
        if(num<=1) return num;
            return compute(num-1) + compute(num-3);
        }
   }

  class Main{
      public static void main (String[] args){
    Parent obj = new Child();
    System.out.print(obj.compute(4));
   }
 }

정답: 1
풀이: compute(4-3)+compute(4-1)= 1+ compute(2)+ compute(0) = 1+ 1+ (-1) + 0

21년 1회 7번 출력 결과

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]);
  }
}

정답:

1
45
50
89         
풀이 : arr[0].length : 0번째 행의 길이, arr[1]: 1번째 행의 길이

21년 1회 17번 출력 결과

    public class Main {
    public static void main(String[] args){
    int i, j;
    for(j=0, i=0; i<=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회 17번 (가)에 알맞은 예약어를 쓰시오

public class Main {
   public static void main(String[] args){
      System.out.print(Main.check(1));
   }

  (가) String check (int num) {
      return (num >= 0) ? "positive" : "negative";
   }
}

정답:static
풀이:
public static 으로 써도 상관없으나 접근제한자는 생략해도 무방 상관없음 없을경우 default 

static 변수 및 메소드 특징 

  • 인스턴스(객체를 생성하지 않고도 사용할 수 있다. 
  • 클래스가 메모리에 로드될때, 스태틱 메모리 영역에 생성된다.
  • static 메소드 안에서는 static 멤버들만 사용할 수 있고, 인스턴스 멤버는 사용할 수 없다. 

21년 2회 19번 출력 결과

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);
    }

}

정답: 11
풀이:
문제오류

public static void main(String[] args) {

    ovr a1 = new ovr1();

    ovr a2 = new ovr2();

    System.out.println(a1.sun(3,2) + a2.sun(3,2));    

}

public class ovr1 extend ovr {

     int sun(int x, int y) {     return x + y;    }

}

public class ovr2 extends ovr1 {

    int sun(int x, int y) {     return x - y + super.sun(x,y);// 부모클래스의 sun 메소드 호출     }

}


5+1+5


21년 3회 1번 출력 결과

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 
풀이: 싱글턴 패턴: 객체의 인스턴스가 오직 한개만 생성되는 패턴 
    Connection conn1 = Connection.get(); //인스턴스(객체) 생성
    conn1.count();                                       //count++
    Connection conn2 = Connection.get(); 인스턴스 null이 아니므로 생성x
    conn2.count();                                        //count++
    Connection conn3 = Connection.get(); // 인스턴스 null이 아니므로 생성x
    conn3.count();                                        //count++

21년 3회 11번 출력 결과

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
풀이:
연산12312자 우선순위
not 연산자(!) > 사칙연산(+,*,/.-) > 관계 연산자(==, >=, !=) > 비트 연산자(&, ^, |) > 논리 연산자(&&, ||)

비트연산자
|(OR연산자) 피연산자 중 한 쪽의 값이 1(true)이면, 1을 결과로 얻는다. 그 외에는 0(false)을 얻는다.
&(AND연산자) 피연산자 양 쪽의 값이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.