안녕하세요.
정보처리기사 실기에 대해 포스팅을 주기적으로 진행하다 보니,
프로그래밍 언어에 대한 문제가 늘어나는 것을 볼 수 있었고,
이로 인해 많은 수험자분들이 많이 탈락하거나 힘들어하는 모습을 볼 수 있었습니다.
그래서 정보처리기사의 시험 기준의 소스코드 문제를 정리해보려합니다.
기출문제이면서 보완설명을 덧붙여 정리하였으니 도움이 되었으면 좋겠습니다. (녹색은 답 / 파랑색은 해설입니다.)
대체적으로 출제되는 C언어, JAVA, Python으로 나뉘어 정리해보겠습니다.
(문제는 계속해서 업데이트될 예정입니다.)
정보처리기사 실기 Java편
다음 출력 결과를 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public static void main(String[] args){
Set a = new HashSet();
a.add(7)
System.out.println(a);
a.add(5)
System.out.println(a);
a.add(5)
System.out.println(a);
a.remove(5)
System.out.println(a);
System.out.println(a.size());
}
|
cs |
[7]
[5,7]
[5,7]
[7]
1
해시셋은 중복된 원소를 허용하지 않는 성질은 가진 클래스이며, 순서에 구애받지 않습니다.
5가 삽입되었을때 중복이 되므러 추가되지 않는것이 포인트입니다.
다음은 2개의 정수를 입력받아 합을 출력하는 Java 프로그램이다. 괄호에 공통으로 들어갈 가장 적합한 코드를 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.( );
public class Test {
public static void main(String args[]){
( ) scan = new ( ) (System.in);
int a = scan.nextInt();
int b = scan.nextInt();
System.out.printf("%d", a +b);
}
}
|
cs |
Scanner
Scanner 클래스의 객체 변수 scan을 키보드로 입력받을 수 있도록 생성합니다.
다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 작성하시오.
1
2
3
4
5
6
7
8
9
10
|
public class Impl{
public static viod main(String args[]){
int a = 12, b = 5, sum = 2;
b *= a /= 4;
sum += ++a * b-- / 4;
System.out.printf("%d", sum);
}
}
|
cs |
17
각 변수들을 초기화하고,
1. b는 (12/4) * 5 = 15가 됩니다. - 변수들의 값을 대입하면 확인할 수 있습니다. (a는 3이 됩니다.)2. sum은 (4*15) / 4 + 2 = 17이 되게 됩니다.- ++a는 전치 증가 연사자라 바로 3에서 4로 반영이 되지만, b--는 후치 증가 연산자라 라인이 끝난 뒤에 반영되기에 여기서는 반영되지 않습니다.
다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Impl{
public static viod main(String args[]){
int a = 5, b = 9, c;
c = b % 5 < 5 ? 1 : 0;
c = c | c << 3;
c = a < 5 || c >= 10 ? c - a : c + a;
System.out.printf("%d", c);
}
}
|
cs |
14
변수 초기화하고,
삼항연산자가 적용되어 c값은 1이 됩니다.
1<<3은 왼쪽 시프트 연산자이므로, c에 저장된 값을 왼쪽으로 3비트 이동시키므로 정수형(4바이트) 2진수로 변환하여 계산하고 10진수로 변환하면 8이 됩니다.
1 | 8 은 9가 되므로 c에는 9가 저장되게 됩니다.
이번 역시 삼항연산자로써 ||는 하나라도 참이면 참이지만 두랃 거짓이므로 9+5를 적용하여 14가 됩니다.
다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
1
2
3
4
5
6
7
8
9
10
|
public class Problem{
public static void main(String[] args){
int i = 0, hap = 0;
do{
++i;
hap += i;
} while(i<5);
System.out.println("%d, %d\n", i, hap);
}
}
|
cs |
5, 15
do ~ while 반복문의 시작점이며 이 안에 문장을 반복하여 수행합니다.
i = i + 1과 동일하므로 i의 값을 1씩 누적 시킵니다.
hap = hap +i 와 동일하므로 i의 값을 hap에 누적시킵니다.i가 5보다 작은 동안 문장을 반복 수행합니다.i가 5가 되었을때 5를 hap에 누적한 다음 do~while문을 탈출하기 때문에 i는 5로 끝납니다.
다음 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
27
28
29
|
class SuperObject {
public void paint(){
draw();
}
public void draw(){
draw();
System.out.println("Super Object");
}
}
class SubObject extends SuperObject {
public void paint(){
super.draw();
}
public void draw(){
System.out.println("Sub Object");
}
}
public class Test{
public static void main(String[] args){
SuperObject a = new SubObject();
a.paint();
}
}
|
cs |
Sub Object
Super Object
클래스 SubObject를 정의하고 부모 클래스로 SuperObject를 지정하면 SuperObject에 속한 변수와 메서드를 상속받습니다.
자식 클래스 생성자로 인스턴스를 생성할 때 자료형을 부모 클래스로 지정하면 생성된 인스턴스는 부모 클래스로 묵시적 클래스 형 변환이 됩니다. 부모와 자식 클래스간 같은 메서드가 존재하면 호출되는 메서드는 생성된 인스턴스에 따라 결정됩니다.
a.paint()는 클래스 형 변환을 수행하였고 print()메서드가 자식 클래스에서 재정의를 통해 오버라이딩 된 메서드이므로 자식 클래스의 paint 메서드가 수행됩니다.
부모 클래스를 호출하는 super를 사용했으므로 부모 클래스의 draw() 메서드를 수행합니다.
부모 클래스 draw()에서 처음에 클래스 형 변환을 수행하였고 draw()메서드가 자식 클래스에서 재정의를 통해 오버라이딩 된 메서드이므로 자식 클래스의 draw()메서드를 수행합니다.
자식 메서드 draw를 수행하면서 'Sub Object가 수행되고' 다시 부모 draw()로 돌아가 나머지 'Super Object'를 수행합니다.
다음은 Java로 1부터 100의 범위 안에서 가장 큰 소수를 구하는 알고리즘을 구현한 것이다.
출력값을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.lang.Math;
public class Test{
public static void main(String[] args){
int p = 2;
int n = 3;
while(true){
double t = Math.sqrt(n);
int m = (int)t;
for(int i=2; i<=m; i++){
int r = n % i;
if(r==0)
break;
if(i==m)
p = n;
}
n++;
if(n>100)
break;
}
System.out.println(p);
}
}
|
cs |
97
숫자 1과 2는 이미 소수라 판단되었음을 가정하여 현재 가장 큰 소수인 2를 저장합니다.
3부터 100까지의 수를 저장할 정수형 변수 n을 선언하고 3으로 초기화합니다.
while로 조건이 맞을때까지 무한반복을 설정합니다.
Math.sqrt() 메서드는 제곱근의 값을 반환합니다.
반복문을 다 돌고 나와서 n값이 증가되고, 100보다 작을때까지 반복문을 수행하면서
p값을 계산해줍니다.
Java 언어로 작성된 출력의 결과를 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class A {
int a;
public A(int a){this.a = a;}
void display(){System.out.println("a=" + a);}
}
class B extends A{
public B(int a)
super(a);
super.display();
}
public class Test{
public static void main(String[] args){
B obj = new B(10);
}
}
|
cs |
a=10
객체 B의 생성자를 호출하면서 10을 넘깁니다.
부모클래스의 생성자에게 10을 넘깁니다.
맴버변수 a에 10을 저장합니다.
부모클래스의 display() 함수를 호출합니다.
'Exam & Study' 카테고리의 다른 글
[2023년 1회] 정보처리기사 실기 복원 문제 (24) | 2023.04.25 |
---|---|
[Java] 클래스(Class) & 인스턴스(Instance) 쉬운설명 (0) | 2023.02.15 |
정보처리기사 실기 Python편 (7) | 2022.05.25 |
[2022년 1회] 정보처리기사 실기 복원 문제 (15) | 2022.05.21 |
웹서버(WEB)와 웹애플리케이션서버(WAS) 차이!! (0) | 2022.01.05 |
댓글