본문 바로가기
카테고리 없음

2023 정보처리기사 실기 2회 프로그래밍 문제 해설(1번, 2번, 3번)

by picker_life 2024. 3. 5.
반응형

2023 정보처리기사 실기 2회 1번

 

문제

1. C언어 코드의 문제. 보기의 조건에 맞도록 괄호안에 알맞은 코드를 작성

 

입력값이 54321일 경우 출력값이 43215로 출력되어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(void) {
 
    int n[5];
    int i;
 
    for (i = 0; i < 5; i++) {
        printf("숫자를 입력해주세요 : ");
        scanf("%d"&n[i]);
    }
 
    for (i = 0; i < 5; i++) {
        printf("%d", (            ) );
    }
 
  return 0;
 
}
 
cs

 

정답

n[(i+1) % 5]

 

해설

여기서 i는 현재 반복문에서의 인덱스를 나타낸다. C언어에서 43215가 출력되기 위해 해당 괄호에 들어갈 i를 순서대로 나열하면 1 2 3 4 0 에 해당한다. 0부터 4까지 증가하는 for문에서 해당 값이 나오게 하려면 괄호 안에는 n[i+1 % 5]를 이용하여 5로 나눈 나머지값을 호출하면 된다. 따라서, 완성된 코드의 해당 부분은 다음과 같이 작성된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(void) {
 
    int n[5];
    int i;
 
    for (i = 0; i < 5; i++) {
        printf("숫자를 입력해주세요 : ");
        scanf("%d"&n[i]);
    }
 
    for (i = 0; i < 5; i++) {
        printf("%d", n[(i+1)%5]);
    }
 
  return 0;
}
 
cs

 

 

2023 정보처리기사 실기 2회 11번

 

문제

2. JAVA 코드 문제. 가지고 있는 돈이 총 4620원일 경우 1000원, 500원, 100원, 10원의 지폐 및 동전을 이용하여 보기의 조건에 맞춰 최소한의 코드를 통해 괄호안을 작성

 

변수 : m
연산자 : / , %
괄호 : [ , ] , ( , )
정수 : 1000, 500, 100, 10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Problem{
    public static void main(String[] args){
 m = 4620;
 
 a = (              );
 b = (              );
 c = (              );
 d = (              );
 
 System.out.println(a); //천원짜리     4장 출력
 System.out.println(b); //오백원짜리  1개 출력
 System.out.println(c); //백원짜리     1개 출력
 System.out.println(d); //십원짜리     2개 출력
    }
}
cs

정답

 

m / 1000
(m % 1000) / 500
(m % 500) / 100
(m % 100) / 10

해설

이 문제는 주어진 금액인 4620원을 1000원, 500원, 100원, 10원으로 나누어 필요한 지폐 및 동전의 개수를 계산하는 것이다. JAVA에서 이러한 연산을 수행하기 위해서는 나눗셈 연산자(/)와 나머지 연산자(%)를 사용한다.

주어진 금액 m을 각각의 화폐 단위로 나누어서 필요한 지폐 및 동전의 수를 계산하려면, 다음과 같은 과정을 따른다.

  • 천원짜리 지폐 수를 계산하기 위해 m을 1000으로 나눈다. m / 1000
  • 오백원짜리 동전 수를 계산하기 위해, 먼저 1000원으로 나눈 나머지를 사용하고, 이 값을 500으로 나눈다: (m % 1000) / 500
  • 백원짜리 동전 수를 계산하기 위해, 500원으로 나눈 나머지를 사용하고, 이 값을 100으로 나눈다: ((m % 1000) % 500) / 100
  • 십원짜리 동전 수를 계산하기 위해, 100원으로 나눈 나머지를 사용하고, 이 값을 10으로 나눈다: (((m % 1000) % 500) % 100) / 10

 

2023 정보처리기사 실기 2회 3번

 

문제

3. c언어로 보기의 조건에 맞추어 알맞은 출력값을 작성

입력값은 홍길동, 김철수, 박영희 순서로 주어진다.

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
#include<stdio.h> 
char n[30];
char *test() {
    printf(입력하세요 : );
    gets(n);
    return n;
}
 
int main()
 
{
    char * test1;
    char * test2;
    char * test3;
 
    test1 = test();
    test2 = test();
    test3 = test();
 
    printf(%s\n,test1);
    printf(%s\n,test2);
    printf(%s,test3);
 
}
cs

 

정답

 

박영희

박영희

박영희

해설

이 C언어 코드에서는 test 함수를 통해 사용자로부터 문자열을 입력받아 전역 배열 n에 저장하고, 그 주소를 반환한다. main 함수에서는 이 test 함수를 세 번 호출하여 세 개의 문자열을 입력받고, 각각 test1, test2, test3 포인터 변수에 저장한다.

하지만 test1, test2, test3 모두 동일한 전역 배열 n의 주소를 가리키고 있다. 즉, 각 함수 호출 시 배열 n의 내용이 새로 입력받은 값으로 갱신된다. 결과적으로 test1, test2, test3 모두 마지막으로 입력받은 문자열을 가리키게 된다.

입력값이 "홍길동", "김철수", "박영희" 순서로 주어지면, 각 호출에서 "홍길동", "김철수"로 배열 n이 갱신되고, 마지막으로 "박영희"로 갱신된다. 따라서, test1, test2, test3 모두 마지막으로 입력된 "박영희"를 가리키게 된다.

그러므로 출력값은 다음과 같이 모두 "박영희"가 된다.