[1회]
3. 다음은 자바 코드이다. 출력 결과를 쓰시오.
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();
m.a = 100;
func1(m);
m.b = m.a;
func2(m);
System.out.printf("%d", m.a);
}
}
1) class A
- 정수형 변수 a, b 선언.
2) class Soojebi
- A m = new A(); → A클래스의 인스턴스인 m을 생성. 이 인스턴스는 a와 b 두 개의 멤버 변수 가짐.
- m.a = 100; → m 인스턴스의 a 멤버 변수에 100을 할당. 따라서 m.a = 100이 됨.
- func1(m);
→ func1 함수를 호출하는데 A 클래스의 인스턴스 받아서 해당 인스턴스의 a 값을 10을 곱함. 따라서 m.a = 1000이 됨.
→ m.a = m.a * 10 = 100 * 10 = 1000.
- m.b = m.a; → m.a 값을 m.b에 할당하므로 m.b = 1000이 됨.
- func2(m);
→ func2 함수를 호출하는데 A 클래스의 인스턴스 받아서 해당 인스턴스의 a값을 a와 b의 합으로 만듦.
→ m.a = m.a + m.b = 1000 + 1000 = 2000.
- System.out.printf("%d", m.a);
→ m.a의 값을 정수값으로 출력하므로 현재 m.a의 값은 2000이기 때문에 2000을 출력.
[출력]
2000
6. 다음은 파이썬 코드이다. 출력 결과를 쓰시오.
def func(num1, num2=2) :
print('a=', num1, 'b=', num2)
func(20)
1) def func(num1, num2=2) :
- func라는 함수 정의.
- num1, num2 두 개의 매개 변수 가짐.
- num2의 초기값은 2로 설정.
2) print('a=', num1, 'b=', num2)
- 함수 내에서 실행하는 코드로, print 함수 사용하여 num1과 num2 값을 출력.
3) func(20)
- 함수를 호출하는 부분.
- func 함수를 호출하면서 값 1개만 전달되었으므로 num1로만 값을 전달.
- 따라서 num1은 20이 되고, num2에는 값을 전달하지 않았으므로 그대로 2를 출력.
[출력]
a= 20, b= 2
11. 다음은 스레드에 관한 코드이다. 밑줄 친 곳에 알맞은 코드를 쓰시오.
class Car implements Runnable{
int a;
public void run() {
// ...
}
}
public class Soojebi {
public static void main(String[] args) {
Thread t1 = new Thread(new _____());
t1.start();
}
}
1) Thread t1 = new Thread(new _____());
- Runnable은 인터페이스이고, new 다음에는 클래스 이름이 와야 함.
- 따라서 Car 클래스의 인스턴스를 생성하여 Thread 생성자에 전달해야 하는데, 이를 통해 Car 객체가 Runnable로 사용.
- 이렇게 하는 이유는 Java에서 스레드를 관리하고 실행하기 위해 스레드 클래스에 Runnable 인터페이스를 구현한 개체를 전달해 사용하는 것이 일반적인 패턴.
- Thread 스레드변수 = new 상속받은 스레드클래스();
- Thread 스레드변수 = new Thread(new 상속받은 스레드클래스());
[정답]
Car
14. 다음 소스 코드에 입력값이 5가 들어왔을 때 출력값을 쓰시오.
#include<stdio.h>
int fn(int a) {
if (a <= 1) return 1;
return a * fn(a - 1);
}
void main() {
int a;
scanf("%d", &a);
printf("%d", fn(a));
}
1) int a; → 정수형 변수 a 선언
2) scanf("%d", &a);
- 사용자로부터 정수값을 입력받아 a 변수에 저장. 문제에서 입력값이 5이므로 a는 5가 됨.
- scanf 함수를 사용하면 a의 주소값을 입력해야 함.
3) printf("%d", fn(a));
- fn 함수 호출하면서 a값을 인자로 전달.
4) fn 함수
① a = 5 일 때 5 * fn(4);
② a = 4 일 때 4 * f(3);
③ a = 3 일 때 3 * f(2);
④ a = 2 일 때 2 * f(1);
⑤ a = 1 일 때 a <= 1이므로 return 1을 반환.
따라서 계산하면 1 * 2 * 3 * 4 * 5 = 120을 출력.
fn 함수는 재귀함수임을 알 수 있음.
[출력]
120
15. 밑줄 친 곳에 연산자 이용해 정수를 역순으로 출력하는 프로그램을 완성하시오. 예를 들어 1234의 역순은 431이고, 1230처럼 0으로 끝나는 정수는 고려하지 않는다.
#include<stdio.h>
void main() {
int number = 1234;
int div = 10;
int result = 0;
while (number __①__ 0) {
result = result * div;
result = result + number __②__ div;
number = number __③__ div;
}
printf("%d", result);
}
① >
② %
③ /
②는 % 연산자가 들어와야 함. result를 출력할 때 역순으로 출력해야 하므로 div로 나눴을 때 나머지값이 나와야 하기 때문.
- result = result + num % div = 0 + 1234 % 10 = 4이므로 현재 result = 4를 저장.
③은 / 연산자가 들어와야 함. 맨 뒷자리 수를 제거해야 하기 때문.
따라서 실행하게 되면,
int number = 1234;
int div = 10;
int result = 0;
1)
ressult = result * div = 0 * 10 = 0
result = result + number % div = 0 + 1234 % 10 = 4
number = number / div = 1234 / 10 = 123
2)
result = result * div = 4 * 10 = 40
result = result + number % div = 40 + 123 % 10 = 43
number = numberr / div = 123 / 10 = 12
3)
result = result * div = 43 * 10 = 430
result = result + number % div = 430 + 12 % 10 = 432
number = number / div = 12 / 10 = 1
4)
result = result * div = 432 * 10 = 4320
result = result + number % div = 4320 + 1 % 10 = 4321
number = number / div = 1 / 10 = 0
19. 다음 소스 코드가 실행될 때 출력값을 적으시오.
#include<stdio.h>
int isPrime(int number) {
int i;
for (i = 2; i < number; i++) {
if (number % i == 0) return 0;
}
return 1;
}
void main() {
int number = 13195, max_div = 0, i;
for (i = 2; i < number; i++)
if (isPrime(i) == 1 && number % i == 0)
max_div = i;
printf("%d", max_div);
}
▶ 이 코드는 13195의 가장 큰 소인수를 찾는 프로그램.
① i = 2 일 때
- isPrime(2) 호출 시, 2는 소수이므로 1을 반환.
- main 함수로 돌아와 if문 실행했을 때 number % 2는 13195를 2로 나눈 난머지인 1을 반환함.
- 따라서 max_div는 업데이트되지 않고 결과적으로 0을 출력.
② i = 3 일 때
- isPrime(3) 호출 시, 3은 소수이므로 1을 반환.
- main 함수로 돌아와 if문 실행했을 때 number % 3은 13195를 3으로 나눈 나머지인 2를 반환함.
- 따라서 max_div는 없데이트 되지 않고, 결과적으로 0을 출력.
③ i = 4 일 때
- isPrime(4) 호출 시, 4는 소수가 아니므로 0을 반환.
- main 함수로 돌아와 if문 조건 확인 했을 때 앞에 조건은 0인 거짓이므로 뒤에 문장 실행하지 않음.
- 따라서 max_div는 업데이트 되지 않고, 결과적우로 0을 출력.
④ i = 5 일 때
- isPrime(5) 호출 시, 5는 소수이므로 1을 반환.
- main 함수로 돌아와 if문 실행했을 때 number % 5는 13195를 5로 나눈 나머지인 0을 반환.
- 이 때 if문 조건은 참이므로 max_div는 i인 5로 업데이트되며, 결과적으로 5를 출력.
이런 식으로 진행하다 보면 가장 큰 수인 29를 출력함.
[출력]
29
[2회]
7. 다음 JAVA 코드의 실행 결과를 쓰시오.
public class Soojebi {
public static void main(String[] args) {
int i = 3;
int k = 1;
switch(i) {
case 1 : k += 1;
case 2 : k++;
case 3 : k = 0;
case 4 : k += 3;
case 5 : k -= 10;
default : k--;
}
System.out.printf("%d", k);
}
}
1) int i = 3; int k = 1;
- 정수형 변수 i, k 선언하고 i에는 3, k에는 1로 초기화.
2) switch문
- i의 값은 3이므로 case 3에서 시작.
- case 3은 k = 0
- case 4에는 k += 3이므로 k = k + 3 = 0 + 3 = 3. 따라서 k = 3
- case 5에는 k -= 10이므로 k = k - 10 = 3 - 10 = -7. 따라서 k = -7
- default에는 k--이므로 -7 -1 = -8. 따라서 k = -8을 출력.
현재 switch문에서 각각의 case 값에 break가 없기 때문에 해당하는 case에서 쭉 내려와서 계속 실행한 것.
default는 있기 때문에 무조건 실행. case 다른 구문에서 break 있어서 끝나도 deault는 실행하고 끝내야 함.
[출력]
-8
8. 다음은 C언어 코드이다. 실행 결과를 쓰시오.
#include<stdio.h>
struct student {
int n, g;
};
int main() {
struct student st[2];
int i = 0;
for (i; i < 2; i++) {
st[i].n = i;
st[i].g = i + 1;
}
printf("%d", st[0].n + st[1].g);
return 0;
}
1) student 구조체를 정의하며, 이 구조체에는 n, g라는 두 개의 멤버 변수 정의.
2) struct student st[2];
- 구조체 student로 이루어진 배열의 길이가 2인 st 선언.
3) int i = 0;
- 정수형 변수 i 선언하면서 0으로 초기화.
4) for문
① i = 0 일 때
- st[0].n = 0;
- st[0].g = i + 1 = 0 + 1 =1이므로 st[0].g = 1;
② i = 1 일 때
- st[1].n = 1
- st[1].g = i + 1 = 1 + 1 = 2이므로 st[1].g = 2;
st | st[[0] | st[1] | ||
n | g | n | g | |
0 | 1 | 1 | 2 |
5) 출력
① st[0].n은 0이고, st[1].g는 2이므로 1 + 2 = 3을 출력.
[출력]
2
14. 다음 Python 코드의 실행 결과를 쓰시오.
a = "REMEMBER NOVEMBER"
b = a[:3] + a[12:16]
c = "R AND %s"%STR"
print(b + c)
1) a = "REMEMBER NOVEMBER"
- 문자열 "REMEMBER NOVEMBER"를 변수 a에 저장.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
R | E | M | E | M | B | E | R | N | O | V | E | M | B | E | R |
2) b = a[:3] + a[12:16]
① a[:3]은 0번째부터 2번째까지 출력하는 것으로 "REM"
② a]12:16]은 12번째부터 15번째까지 출력하는 것으로 "EMBE"
- 따라서 출력결과는 "REMEMBE"가 b에 저장.
3) c = "R AND %s"%STR"
- %s에 "STR" 문자열로 대체한 결과가 저장되므로 c에는 R AND STR을 저장.
4) 출력
b + c이므로 b인 "REMEMBE"와 c인 R AND STR을 합치면 REMEMBER AND STR을 출력.
[출력]
REMEMBER AND STR
15. 다음은 C언어 코드이다. 실행 결과를 쓰시오,
#include<stdio.h>
int len(char* p);
int main() {
char *p1 = "2022";
char *p2 = "202207";
printf("%d", len(p1) + len(p2));
return 0;
}
int len(char* p) {
int r = 0;
while (*p != '\0') {
p++;
r++;
}
return r;
}
1) char *p1 = "2022"
- 포인터 변수 p1은 "2022"를 저장하고, 맨 첫 번째 문자 "2"를 가리킴.
2) char *p2 = "202207"
- 포인터 변수 p2는 "202207"을 저장하고, 맨 첫번째 문자 "2"를 가리킴.
▶ 문자열은 null문자(\0)로 끝나며, 문자열의 끝을 나타냄
3) printf("%d", len(p1) + len(p2));
① len(p1) : p1의 문자열 "2022"의 길이는 4
② len(p2) : p2의 문자열 "202207"의 길이는 6
따라서 4 + 6 = 10을 출력.
[while문]
- p가 null문자 만날 때까지 p와 r의 값을 증가시킴.
- 따라서 p1은 null문자 만나기 전인 4를 반환함. ("2022")
- p2는 null문자 만나기 전인 6을 반환함. ("202207")
16. 다음은 C언어 코드이다. 실행 결과를 쓰시오.
#include<stdio.h>
void main() {
int a[4] = { 0, 2, 4, 8 };
int b[3];
int* pl;
int i, j;
int sum = 0;
for (i = 1; i < 4; i++) {
pl = a + i;
b[i - 1] = *pl - a[i - 1];
sum = sum + a[i] + b[i - 1];
}
printf("%d", sum);
}
1) int a[4] = { 0, 2, 4, 8 };
- 길이가 4인 정수형 배열 a 선언하면서 초기화.
- a 배열의 시작을 100번지로 가정.
a | a[0] | a[1] | a[2] | a[3] |
0 | 2 | 4 | 8 | |
100 | 101 | 102 | 103 |
2) int b[3];
- 길이가 3인 정수형 배열 b 선언.
3) int *pl;
- 정수형 포인터 배열 pl 선언.
4) int i, j; int sum = 0;
- 정수형 변수 i, j 선언. 정수형 변수 sum 선언하면서 0으로 초기화.
5) for문
① i = 1일 때
- pl = a + i = 100 + 1 = 101번지. (현재 a는 100번지, i는 1의 값이므로 100 + 1 = 101)
- b[0] = *pl - a[0] = 2 - 0 = 2. (pl의 값은 101번지의 값이므로 2를 출력하고, a[0]은 0)
- 따라서 b[0]에는 2의 값을 저장,
- sum = sum + a[1] + b[0] = 0 + 2 + 2 = 4이므로 sum = 4를 저장.
② i = 2 일 때
- pl = a + i = 100 + 2 = 102번지.
- b[1] = *pl - a[1] = 4 - 2 = 2.
- 따라서 b[1]에는 2의 값을 저장.
- sum = sum + a[2] + b[1] = 4 + 4 + 2 = 10이므로 sum = 10을 저장.
③ i = 3 일 때
- pl = a + i = 100 + 3 = 103번지.
- b[2] = *pl - a[2] = 8 - 4 = 4.
- 따라서 b[2]에는 4의 값을 저장.
- sum = sum + a[3] + b[2] = 10 + 8 + 4 = 22이므로 sum = 22를 저장.
[출력]
22
17. 다음 JAVA 코드의 실행 결과를 쓰시오.
public class Soojebi {
int a;
public Soojebi(int a) {
this.a = a;
}
int func() {
int b = 1;
for(int i = 1; i < a; i++) {
b = a * i + b;
}
return a + b;
}
public static void main(String[] args) {
Soojebi obj = new Soojebi(3);
obj.a = 5;
int b = obj.func();
System.out.println(obj.a + b);
}
}
1) Soojebi obj = new Soojebi(3);
- obj는 Soojebi 클래스의 인스턴스로 멤버 변수 a를 생성.
- Soojebi 클래스 생성자 호출하고 있으며, 생성자에 3이라는 인자값 전달.
2) public Soojebi(int a)
- 클래스명과 동일한 이름을 가진 생성자로, main 함수에서 호출하며 3이라는 인자값을 전달햇으므로 a에 3을 할당.
3) obj.a = 5;
- main 함수로 돌아와 obj.a = 5는 3으로 초기화한 obj 객체의 멤버 변수 a를 5로 변경. 따라서 a에는 5.
4) int b = obj.func();
- 변수 b는 main 메서드 내에서만 선언된 지역 변수.
- main 메서드 실행이 종료되면 메모리에서 사라짐.
- obj 인스턴스가 가지고 있는 func 메서드를 호출하게 됨.
▶ func의 b와 main 메서드의 b는 다른 변수!!
5) 함수 실행
① i = 1 일 때 (a는 5이므로 i < 5까지 반복)
- b = a * i + b = 5 * 1 + 1 = 6
② i = 2 일 때 b = a * i + b = 5 * 2 + 6 = 16
③ i = 3 일때 b = a * i + b = 5 * 3 + 16 = 31
④ i = 4 일 때 b = a * i + b = 5 * 4 + 31 = 51
⑤ i = 5 일 때 조건이 거짓이므로 반복문 종료.
⑥ return a + b = 5 + 51 = 56을 반환하며 함수 종료.
6) 출력
int b = obj.func()는 56
따라서 obj.a는 5이고, b는 56이므로 5 + 56 = 61을 출력하게 됨.
[출력]
61
[3회]
4. 다음은 JAVA 언어 코드이다. 실행 결과를 쓰시오.
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;
for(int j=0; j<5; j++) {
if(arr[i] < arr[j]) result[i]++;
}
}
for(int k=0; k<5; k++) {
System.out.print(result[k]);
}
}
}
1) int[] result = new int[5];
- 길이가 5인 정수형 배열 result 선언.
2) int[] arr = {79, 34, 10, 99, 50};
- 정수형 배열 arr 선언하면서 초기화.
arr | arr[0] | arr[1] | arr[2] | arr[3] | arr[4] |
79 | 34 | 10 | 99 | 50 |
3) 첫 번째 for문
① i = 0 일 때
result[0] = 1로 초기화.
j = 0 일 때 if문 조건 확인하면 arr[0] < arr[0] = 79 < 79 조건은 거짓이므로 다음 루프 실행.
j = 1 일 때 if문 조건 확인하면 arr[0] < arr[1] = 79 < 34 조건은 거짓이므로 다음 루프 실행.
j = 2 일 때 if문 조건 확인하면 arr[0] < arr[2] = 79 < 10 조건은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 arr[0] < arr[3] = 79 < 99 조건은 참이므로 result[0]에 ++ 하면 result[0] = 2.
j = 4 일 때 if문 조건 확인하면 arr[0] < arr[4] = 79 < 50 조건은 거짓이므로 다음 루프 실행.
j = 5 일 때 조건이 맞지 않으므로 빠져나옴.
따라서 result[0] = 2.
② i = 1 일 때
result[1] = 1로 초 기화.
j = 0 일 때 if문 조건 확인하면 arr[1] < arr[0] = 34 < 79 조건은 참이므로 result[1]에 ++ 하면 result[1] = 2.
j = 1 일 때 if문 조건 확인하면 arr[1] < arr[1] = 34 < 34 조건은 거짓이므로 다음 루프 실행.
j = 2 일 때 if문 조건 확인하면 arr[1] < arr[2] = 34 < 10 조건은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 arr[1] < arr[3] = 34 < 99 조건은 참이므로 result[1]에 ++ 하면 result[1] = 3.
j = 4 일 때 if문 조건 확인하면 arr[1] < arr[4] = 34 < 50 조건은 참이므로 result[1]에 ++ 하면 result[1] = 4.
j = 5 일 때 조건 맞지 않으므로 빠져나옴.
따라서 result[1] = 4.
③ i = 2 일 때
result[2] = 1로 초기화.
j = 0 일 때 if문 조건 확인하면 arr[2] < arr[0] = 10 < 79 조건은 참이므로 result[2]에 ++ 하면 result[2] = 2.
j = 1 일 때 if문 조건 확인하면 arr[2] < arr[1] = 10 < 34 조건은 참이므로 result[2]에 ++ 하면 result[2] = 3.
j = 2 일 때 if문 조건 확인하면 arr[2] < arr[2] = 10 < 10 조건은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 arr[2] < arr[3] = 10 < 99 조건은 참이므로 result[2]에 ++ 하면 result[2] = 4.
j = 4 일 때 if문 조건 확인하면 arr[2] < arr[4] = 10 < 50 조건은 참이므로 result[2]에 ++ 하면 result[2 ] =5.
j = 5 일 때 조건이 맞지 않으므로 빠져나옴.
따라서 result[2] = 5.
④ i = 3 일 때
result[3] = 1로 초기화.
j = 0 일 때 if문 조건 확인하면 arr[3] < arr[0] = 99 < 79 조건은 거짓이므로 다음 루프 실행.
j = 1 일 때 if문 조건 확인하면 arr[3] < arr[1] = 99 < 34 조건은 거짓이므로 다음 루프 실행.
j = 2 일 때 if문 조건 확인하면 arr[3] < arr[2] = 99 < 10 조건은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 arr[3] < arr[3] = 99 < 99 조건은 거짓이므로 다음 루프 실행.
j = 4 일 때 if문 조건 확인하면 arr[3] < arr[4] = 99 < 50 조건은 거짓이므로 다음 루프 실행.
j = 5 일 때 조건이 맞지 않으므로 빠져나옴.
따라서 result[3] = 1.
⑤ i = 4 일 때
result[4] = 1로 초기화.
j = 0 일 때 if문 조건 확인하면 arr[4] < arr[0] = 50 < 79 조건은 참이므로 result[4]에 ++ 하면 result[4] = 2.
j = 1 일 때 if문 조건 확인하면 arr[4] < arr[1] = 50 < 34 조건은 거짓이므로 다음 루프 실행.
j = 2 일 때 if문 조건 확인하면 arr[4] < arr[2] = 50 < 10 조건은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 arr[4] < arr[3] = 50 < 99 조건은 참이므로 result[4]에 ++ 하면 result[4] = 3.
j = 4 일 때 if문 조건 확인하면 arr[4] < arr[4] = 50 < 50 조건은 거짓이므로 다음 루프 실행.
j = 5 일 때 조건이 맞지 않으므로 빠져나옴.
따라서 result[4] = 3.
4) 두 번째 for문.
① k = 0 일 때 result[0] = 2.
② k = 1 일 때 result[1] = 4.
③ k = 2 일 때 result[2] = 5.
④ k = 3 일 때 result[3] = 1.
⑤ k = 4 일 때 result[4] = 3.
[출력]
24513
9. 다음은 파이썬 코드이다. 실행 결과를 쓰시오.
l = [1, 2, 3, 4, 5]
l = list(map(lamda num : num + 100, l))
print(l)
▶ 리스트 l에 있는 각 원소에 100을 더하는 작업을 수행 후, 그 결과를 다시 리스트로 만들어 출력하는 코드.
1) map함수 : 주어진 리스트 l의 각 원소에 함수를 적용하는데, 여기서 lamda 함수 사용하여, 각 원소에 100을 더함.
2) list(map(lamda num : num + 100, l))
▷ lamda 매개변수 : 표현식
- 매개변수인 왼쪽 num 값으로 리스트 l의 값이 순차적으로 전달되며, 이 값은 오른쪽의 num + 100에 전달되어 연산.
- 1 + 100, 2 + 100, 3 + 100, 4 + 100, 5 + 100이 실행되어, 101, 102, 103, 104, 105가 계산됨.
- list 함수 매개변수에 101, 102, 103, 104, 105가 전달되며, 리스트로 변환한 결과를 l에 대입.
[출력]
[101, 102, 103, 104, 105]
13. 다음은 C언어 코드이다. 실행 결과를 쓰시오.
#include<stdio.h>
int main() {
int i, j, k, s;
int el = 0;
for (i = 6; i <= 30; i++) {
s = 0;
k = i / 2;
for (j = 1; j <= k; j++) {
if (i % j == 0) {
s += j;
}
}
if (s == i) {
el++;
}
}
printf("%d", el);
return 0;
}
▶ 6부터 30까지의 완전수 찾고, 그 개수 출력하는 코드. (완전수는 자신을 제외한 약수들의 합이 그 수와 같은 수를 의미.)
1) int i, j, k, s
- 정수형 변수 i, j, k, s 선언.
2) int el = 0;
- 정수형 변수 el 선언하면서 0으로 초기화. (완전수의 개수 추적하기 위해 사용.)
3) for문
① i = 6 일 때
s = 0.
k = i / 2 = 6 / 2 = 3. (j <= 3)
j = 1일 때 if문 조건 확인하면 6 % 1 == 0은 참이므로 s = s + j 실행하여 s = 0 + 1 = 1이 됨.
j = 2 일 때 if문 조건 확인하면 6 % 2 == 0은 참이므로 s = s + j 실행하여 s = 1 + 2 = 3이 됨.
j = 3 일 때 if문 조건 확인하면 6 % 3 == 0은 참이므로 s = s + j 실행하여 s = 3 + 3 = 6이 됨.
j = 4 일 때 조건이 맞지 않으므로 루프 종료.
마지막에 if문 조건 확인하면 s == i는 6 == 6이므로 참이기 때문에 el을 ++하여 el = 2가 됨.
② i = 7 일 때
s = 0.
k = i / 2 = 7 / 2 = 3. (j <= 3)
j = 1 일 때 if문 조건 확인하면 7 % 1 == 0은 참이므로 s = s + j 실행하여 s = 0 + 1 = 1이 됨.
j = 2 일 때 if문 조건 확인하면 7 % 2 == 0은 거짓이므로 다음 루프 실행.
j = 3 일 때 if문 조건 확인하면 7 % 3 == 0은 거짓이므로 다음 루프 실행.
j = 4 일 때 조건이 맞지 않으므로 루프 종료.
마지막에 if문 조건 확인하면 s == i는 1 == 7은 거짓이므로 el은 그대로 1이 됨.
이러한 과정을 반복하면 6부터 30까지의 수 중에서 완전수인 경우 el을 증가하여 el 값을 출력함.
6부터 30까지의 수 중 완전수는 6, 28이므로 el의 값은 2를 출력하게 됨.
[출력]
2
19. 다음은 JAVA 언어 코드이다. 실행 결과를 쓰시오.
public class Soojebi {
static int[] MakeArray() {
int[] tempArr = new int[4];
for(int i = 0; i<tempArr.length; i++) {
tempArr[i] = i;
}
return tempArr;
}
public static void main(String[] args) {
int[] intArr;
intArr = MakeArray();
for(int i=0; i<intArr.length; i++) {
System.out.print(intArr[i]);
}
}
}
1) Makearray 함수
- Makearrya 함수는 int 타입의 배열을 반환하는 정적 메서드.
① int[] tempArr = new int[4];
- 길이가 4인 정수형 배열 tempArr 선언.
② for문
- i = 0 일 때 tempArr[0] = 0;
- i = 1 일 때 tempArr[1] = 1;
- i = 2 일 때 tempArr[2] = 2;
- i = 3 일 때 tempArr[3] = 3;
③ return tempArr;
- 이 배열을 반환.
2) main 메서드
① int[] intArr;
- 정수형 배열을 위한 참조변수 intArr를 선언. 배열 생성되지 않고, 단순히 배열을 참조할 준비만 함.
② intArr = MakeArray();
- MakeArray() 메서드를 호출하여 변환된 배열을 intArr에 저장.
- 이제 intArr는 {0, 1, 2, 3}이라는 배열 가리킴.
③ for문
- 배열의 길이가 4이므로, i = 0부터 i = 3까지 총 4번 반복.
- 각 반복마다 배열 intArr의 해당 인덱스 요소가 System.out.print()에 의해 출력.
[출력]
0123
20. 다음은 JAVA 언어 코드이다. 실행 결과를 쓰시오.
public class Soojebi {
public static void main(String[] args) {
int a = 0;
for(int i=1; i<999; i++) {
if(i%3==0 && i%2 !=0)
a = i;
}
System.out.print(a);
}
}
▶ i가 3으로 나눴을 때 나머지가 0이면서, 2로 나눴을 때 0이 아닌 가장 큰 값을 찾는 코드.
1) int a = 0;
- 정수형 변수 a 선언하면서 0으로 초기화.
2) for문
① i = 1 일 때 if문 조건 확인하면 1%3 == 0은 거짓이므로 뒤에 조건도 거짓이어서 다음 루프 실행.
② i = 2 일 때 if문 조건 확인하면 2%3 == 0은 거짓이므로 뒤에 조건도 거짓이어서 다음 루프 실행.
③ i = 3 일 때 if문 조건 확인하면 3%3 == 0은 참이므로 뒤에 조건 확인. 3%2 != 0은 참이므로 a에 i값 대입하면 a = 3.
이런 식으로 반복문을 실행하다 보면 3의 배수이면서 6의 배수가 아닌 수를 찾으면 됨.
3의 배수에서 가장 큰 수는 996이고, 6의 배수에서 가장 큰 수는 996이므로 3의 배수에서 가장 큰 수는 996은 조건 성립 안 됨.
두 번째로 가장 큰 3의 배수는 993이고, 6의 배수에서 두 번째로 큰 수는 990이므로 조건이 성립되므로 993을 출력하게 됨.
따라서 가장 큰 수는 993.
[출력]
993
'Studying > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기]_2023년 2회 (0) | 2024.10.14 |
---|---|
[정보처리기사 실기]_2023년 1회 (2) | 2024.10.14 |
[정보처리기사 실기]_2022년 3회 (4) | 2024.10.12 |
[정보처리기사 실기]_2022년 2회 (2) | 2024.10.12 |
[정보처리기사 실기]_2022년 1회 (5) | 2024.10.11 |