관리 메뉴

나구리의 개발공부기록

Chapter 03 - 자바(기출문제_2) 본문

2024년도 수제비 실기책(6판) 내용 정리


** 자바 이론은 자바의 정석기초편 글을 참조, 여기서는 생략

11. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

public class Soojebi {
	public static void main(String[] args) {
		int[][] arr = new int[][] {{45, 50, 75}, {89}}; // 2차원 배열 
		System.out.println(arr[0].length); // 배열 arr[0]번째의 길이
		System.out.println(arr[1].length); // 배열 arr[1]번째의 길이
		System.out.println(arr[0][0]);  // 배열arr[n][n]의 값
		System.out.println(arr[0][1]);
		System.out.println(arr[1][0]);
	}
}

// 3
// 1
// 45
// 50
// 89

12. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

public class Soojebi {
	public static void main(String[] args) {
		int i, j;
		for (j=0, i=0; i<=5; i++) {
			j+=i;	// i는 1씩 증가, j는 i의 값을 + 누적 연산
			System.out.print(i);	// 개행없이 i출력 0 ~ 5
			if(i == 5) { // i가 5가 되면 아래 코드를 실행
				System.out.print("=");	// 개행 없이 =출력
				System.out.print(j);	// 개행 없이 j의 값 출력 0 ... 15
			}
			else { // 그 외에는 아래의 코드를 시행
				System.out.print("+");	// 개행 없이 +출력
			}
		}	
	}
}
//0+1+2+3+4+5=15

13. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

class ovr1 {
	public static void main(String[] args) {	// 프로그램 실행
    	// 각 클래스 객체 생성
		ovr1 a1 = new ovr1();
		ovr2 a2 = new ovr2();
        // 각 클래스의 san 메서드의 호출 결과를 + 연산해서 출력
		System.out.println(a1.san(3, 2) + a2.san(3, 2)); //5 + 6
	}
	
	int san(int x, int y) {
		return x+y;	// 매개변수의 값을 + 연산, 5 = 3 + 2
	}
}
class ovr2 extends ovr1{
	int san(int x, int y) {	// 
		// 조상의 san 메서드의 연산결과를 +, 6 =  3 - 2 + 5
        return x - y + super.san(x,y);
	}
}
// 11

14. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

class Soojebi{
	// Soojebi 클래스에서만 접근 가능한 private, 프로그램 구동시 바로 메모리에 올라가는 static
    // Soojebi 클래스 타입 변수 instance를 null로 초기화하여 선언
	static private Soojebi instance = null;	
	private int count = 0;	// int타입 클래스 변수 count 선언(private 제어자)
	static public Soojebi get() {	// Soojebi타입 get()메서드 작성
		if(instance == null) {		// 변수의 값이 null 이면, 코드 실행
			instance = new Soojebi();	// 새로운 객체를 생성해서 instance 변수에 저장
		}
		return instance;	// 변수의 값을 반환
	}
	public void count() {count++;}			// 해당 함수가 호출되면 count 변수의 값 증가
	public int getCount() {return count;}	// 해당 함수가 호출되면 count의 값을 반환함
}


public class Soojebi2 {
	public static void main(String[] args) {
		Soojebi s1 = Soojebi.get();	// get 메서드를 호출하여 새로운 객체를 생성(값이 null 이였으므로)
		s1.count();	// s1 객체의 count메서드를 호출하여 count의 값을 1증가
		Soojebi s2 = Soojebi.get();	// get 메서드를 호출 -> instance의 값이 null이 아니므로 기존의 값을 반환
		s2.count();	// s2 객체의 count메서드를 호출하여 count의 값을 1증가, (s1 == s2)
		Soojebi s3 = Soojebi.get();	// get 메서드를 호출 -> instance의 값이 null이 아니므로 기존의 값을 반환
		s3.count();	// s3 객체의 count메서드를 호출하여 count의 값을 1증가, (s1 == s2 == s3)
		System.out.print(s1.getCount());	// s1 객체의 getCount 메서드를 호출하여 count의 값을 출력
	}
}
//3
// s1 == s2, s1 == s3 연산을 해보면 true가 반환되는 것을 확인해 볼 수 있음

15. 다음 자바 밑줄 친 곳에 들어갈 키워드를 작성

출력 결과 : positive


문제 및 풀이

public class Soojebi {
	public static void main(String[] args) {
		System.out.println(Soojebi.check(1));	
	}
	_____ String check(int num) {	// 객체 생성 없이 바로 호출이 가능해야하므로 static이 필요함
		return (num > 0) ? "positive" : "negative";
	}
}
// static

16. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

public class Soojebi {
	public static void main(String[] args) {
		int a = 3, b = 4, c = 3, d = 5;
        // 비트 부호 연산 -> 2진법으로 변환 후 계산
        // &: 모두 1이면 1, |: 둘중 하나라도 1이면 1, ^: 둘의 값이 같으면 0,
        // 3 == 10, 4 == 11, 5 == 100
		if ((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)){
        // 0|1 & !0 & 0 ^ 1 -> 1 & 1 & 1 -> true, 아래 코드 실행
			a = b + c;	// a = 7;
			if(7 == b ^ c != a) {
            // 7 == 4 ^ 3 != 7 -> 0 ^ 1 -> true, 아래 코드 실행
				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

17. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

class A {
	int a;
	int b;
}

public class Soojebi {
	static void func1(A m) {
		m.a *= 10;	
	}
	
	static void func2(A m) {
		m.a += m.b;
	}
	
	public static void main(String[] args) {
		A m = new A();	// A 클래스 객체 생성
		m.a = 100;		// m(A클래스)의 변수 a에 100을 저장
		func1(m);		// func1함수에 m객체를 전달하여 호출 -> m.a = 10 * 100
		m.b = m.a;		// m.a의 값을 m.b에 저장
		func2(m);		// func1함수에 m객체를 전달하여 호출 -> m.a = 1000 + 1000
		System.out.printf("%d", m.a); 	// m.a의 값 출력
	}	
}
// 2000

18. 다음의 스레드에 관한 코드의 밑줄에 알맞은 코드를 작성

문제 및 풀이

class Car implements Runnable {	// 스레드를 실행하기 위한 방법중 하나인 Runnalbe 인터페이스르 구현
	int a;	
	public void run() {	// 쓰레드 실행 메서드 오버라이딩
		System.out.println("run");
	}
}

public class Soojebi {
	public static void main(String[] args) {
		Thread t1 = new Thread(new __________()); // Thread 객체를 생성할 때, 매개변수의 값이 필요함
		t1.start();
	}	
}
// Car

19. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

public class Soojebi {
	int a;
	public Soojebi(int a) {	// 생성자, 매개변수의 값을 클래스변수 a에 저장
		this.a = a;
	}
	int func() {
		int b = 1;
		for (int i=1; i<a; i++) {	// a의 값미만 까지 반복 (1 ~ 4)
        	// 5 * 1 + 1
            // 5 * 2 + 6
            // 5 * 3 + 16
            // 5 * 4 + 31
			b = a * i + b;
		}
		return a + b; // 5 + 51
	}
	
	public static void main(String[] args) {
		Soojebi obj = new Soojebi(3);	// 3을 아규먼트로 Soojebi 객체 생성
		obj.a = 5;	// a의 값을 5로 변경
		int b = obj.func();	// fucn함수의 호출 결과를 b에 저장
		System.out.print(obj.a + b);	// a + b의 값을 출력 5 + 56
	}	
}
// 61

20. 자바 소스 코드의 출력 결과 작성

문제 및 풀이

public class Soojebi {
	public static void main(String[] args) {
		int[] result = new int[5];
		int[] arr = {79, 34, 10, 99, 50};
		
		for(int i = 0; i < 5; i++) {
			result[i] = 1;	// result배열의 i인덱스의 위치에 1을 저장
			for(int j = 0; j < 5; j++) {
            	// arr[i] 값이 arr[j]값보다 작으면 result[i]의 값을 1증가
				if(arr[i] < arr[j]) result[i]++;
                // 1. 79 < 99 -> result[i]++, 2
                // 2. 34 < 79, 99, 50 -> result[i]++, 4
                // 3. 10 < 79, 34, 99, 50 -> result[i]++, 5
                // 4. 99 는 없음, 1
                // 5. 50 < 79, 99 -> result[i]++, 3
			}
		}
		for(int k = 0; k < 5; k++) {
			System.out.print(result[k]);
            // result 배열의 값을 모두 출력
		}
	}	
}
// 24513