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

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

by picker_life 2024. 3. 13.
반응형

2022 정보처리기사 실기 3회 1번

 

문제

1. 아래는 C언어의 2차원 배열 형태이다. field의 경우 2차원 배열 형태는 예시처럼 출력되므로, 이를 참고하여 mines의 2차원 배열 형태를 작성하시오.

 

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
30
31
32
void main{
 
field {{0,1,0,1},{0,0,0,1},{1,1,1,0},{0,1,1,1}};
mines {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; 
 
int w = 4, h = 4;
  for(y=0; y<h; y++) {
    for(x=0; x<w; x++) {  
    if(field[y][x] == 0continue;
    
      for(i=y-1; i<=y+1; i++) {
        for(j=x-1; j<=x+1; j++) {
          if(calculate(w,h,j,i) == 1) {
            mines[i][j] += 1;
          }
        }
      }
    }
  }
  for(y=0; y<h; y++){
    for(x=0; x<w; x++)
      printf("%d", mines[y][x]);
      printf("\n");
  }
 
}
 
 
int calculate(w,h,j,i) {
  if (i >= 0 && i < h && j >= 0 && j < w) return 1;
  return 0;
}
cs
 

예시

0 1 0 1
0 0 0 1
1 1 1 0
0 1 1 1

 

정답칸

       
       
       
       

 

 

정답

[

[1, 1, 3, 2]

[3, 4, 5, 3]

[3, 5, 6, 4]

[3, 5, 5, 3]

]

해설

해당 코드는 지뢰찾기 게임과 유사한 코드로 좌표상에서 자신의 주변과 자기자신의 좌표에 1이 있는 개수를 세는 코드이다. 예시에 나열된 표를 (0,0)부터 (3,3)까지 있다고 가정했을 때 (0.0)의 좌표에는 유일하게 (1,1)에 위치한 1이 있으므로 정답칸의 (0,0)에는 1이 기입된다. 마찬가지로 (2,2)의 좌표 주변에는 5개의 1과 (2,2)좌표에 있는 1까지 합쳐서 총 6개의 1이 존재하기 때문에 (2,2)좌표에는 6이 적히는 원리이다.

추후 코드의 x,y,i,j변수의 값에 따른 각 케이스별로 정리해서 업데이트 할 예정이다.

 

 

2022 정보처리기사 실기 3회 4번

 

문제

4. C언어 코드에 출력 값 작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main{
 
int []result = int[5];
int []arr = [77,32,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++) {
    printf(result[k]);
  }
}
cs

 

정답

24513

해설

이 C 언어 코드는 주어진 arr 배열 내 각 요소의 상대적 크기 순위를 계산한다. 배열 내의 각 값에 대해, 그 값보다 큰 모든 값의 수를 세어 result 배열에 저장한다. 이는 각 원소가 배열 내에서 몇 번째로 큰지를 나타낸다.

arr 배열이 [77,32,10,99,50]로 주어졌을 때

  1. 77은 두 번째로 큰 수이므로 result[0] = 2,
  2. 32는 네 번째로 큰 수이므로 result[1] = 4,
  3. 10은 다섯 번째로 큰 수이므로 result[2] = 5,
  4. 99는 가장 큰 수이므로 result[3] = 1,
  5. 50은 세 번째로 큰 수이므로 result[4] = 3.

따라서, 이 코드의 출력값은 2 4 5 1 3 이다.

 

2022 정보처리기사 실기 3회 9번

 

문제

9. 다음 파이썬 코드에 대한 출력값을 작성하시오.

1
2
3
4
TestList = [1,2,3,4,5]
TestList = list(map(lambda num : num + 100, TestList))
 
print(TestList)
cs

 

 

정답
 

[101,102,103,104,105]

해설

  1. map(function, iterable): 이 함수는 두 개의 인자를 받는다. 하나는 함수이고, 다른 하나는 반복 가능한 자료형이다.(예: 리스트, 튜플 등). map 함수는 주어진 반복 가능한 자료형의 각 요소에 대해 지정된 함수를 실행한다. 결과는 map 객체로 반환되며, 이는 리스트나 다른 반복 가능한 형태로 변환될 수 있다.
  2. lambda num: num + 100: 이 부분은 람다 함수, 즉 이름 없는 함수를 정의한다. 여기서 num은 함수의 입력 변수, num + 100은 반환되는 값이다. 람다 함수는 간단한 함수가 필요한 곳에 주로 사용되며, 여기서는 각 요소에 100을 더하는 단순한 계산에 사용된다.
  3. list(...): 이 코드는 map 객체를 리스트로 변환한다. map 함수의 결과는 직접적으로 리스트가 아니기 때문에, 리스트로 변환하기 위해서는 list() 함수를 사용해야 한다.

결과적으로 이 코드는 TestList 리스트의 각 원소에 100을 더한다. 따라서 출력값은 [101, 102, 103, 104, 105] 가 된다.