본문 바로가기

IT 엔지니어/자격증

정보처리기사 실기 -4

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
#include <stdio.h>
char Data[5= {'B''A''D''E'};
char c;
 
int main(){
    int i, temp, temp2;
 
    c = 'C';
    printf("%d\n", Data[3]-Data[1]);
 
    for(i=0;i<5;++i){
        if(Data[i]>c)
            break;
    }
 
    temp = Data[i];
    Data[i] = c;
    i++;
 
    for(;i<5;++i){
        temp2 = Data[i];
        Data[i] = temp;
        temp = temp2;
    }
 
    for(i=0;i<5;i++){
        printf("%c", Data[i]);
    }
}

 

 

1️⃣ 초기 설정

c
char Data[5] = {'B', 'A', 'D', 'E'};  // 마지막 요소 초기화 안 됨 → 쓰레기 값
char c = 'C';

Data 배열은 원래 4개 요소만 초기화되어 있고, 5번째 요소는 초기화되지 않았기 때문에 쓰레기 값이 들어갑니다. 하지만 이후 로직에서 그 자리를 채우기 때문에 문제 없이 작동합니다.

2️⃣ printf("%d\n", Data[3]-Data[1]);

  • Data[3] = 'E', Data[1] = 'A'
  • 'E' - 'A' = 69 - 65 = 4

✅ 따라서 첫 번째 출력은 4입니다.

3️⃣ 알파벳 ‘C’를 적절한 위치에 삽입

c
for(i = 0; i < 5; ++i){
    if(Data[i] > c) break;
}
  • Data = {'B', 'A', 'D', 'E', ?}
  • 문자의 ASCII값 비교:
    • 'B' (66) > 'C'(67) → ❌
    • 'A' (65) > 'C'(67) → ❌
    • 'D' (68) > 'C'(67) → ✅ i = 2 에서 break

이후,

c
temp = Data[i];     // temp = 'D'
Data[i] = c;        // Data[2] = 'C'

이후 원소를 한 칸씩 밀어내기:

c
for(;i<5;++i){
    temp2 = Data[i];
    Data[i] = temp;
    temp = temp2;
}

결과적으로 배열은 다음과 같이 됩니다:

 
Data = {'B', 'A', 'C', 'D', 'E'}

4️⃣ 최종 출력

c
for(i=0;i<5;i++){
    printf("%c", Data[i]);
}

최종 출력:

 

 

4

 

 

 

#include <stdio.h>
#include <stdlib.h>
 
void set(int** arr, int* data, int rows, int cols) {
    for (int i = 0; i < rows * cols; ++i) {
        arr[((i + 1/ rows) % rows][(i + 1) % cols] = data[i];
    }
}
 
int main() {
    int rows = 3, cols = 3, sum = 0;
    int data[] = {527418369}; 
    int** arr;
    arr = (int**malloc(sizeof(int** rows);
    for (int i = 0; i < cols; i++) {
        arr[i] = (int*malloc(sizeof(int* cols);
    }
 
    set(arr, data, rows, cols);
 
    for (int i = 0; i < rows * cols; i++) {
        sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
    }
 
    for(int i=0; i<rows; i++) {
        free(arr[i]);
    }
    free(arr);
 
    printf("%d", sum);
}

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        new Child();
        System.out.println(Parent.total);
    }
}
 
 
class Parent {
    static int total = 0;
    int v = 1;
 
    public Parent() {
        total += (++v);
        show();    
    }
 
    public void show() {
        total += total;
    }
}
 
 
class Child extends Parent {
    int v = 10;
 
    public Child() {
        v += 2;
        total += v++;
        show();
    }
 
    @Override
    public void show() {
        total += total * 2;
    }
}

 

 

 

 

  • new Child() 실행 시:
    • 먼저 Parent의 생성자가 실행됨 (Java의 규칙)
  • Parent() 생성자:
    • ++v → 1 → 2, total += 2 → total = 2
    • show() 호출 → Child의 오버라이딩된 show() 실행됨!
      • total += total * 2 → 2 + (2×2) = 6
    👉 현재 total = 6
  • 이제 Child의 생성자 본문 실행:
    • v = 10, v += 2 → 12
    • total += v++ → total += 12 → total = 6 + 12 = 18
    • v++ → v는 13이 됨
    • show() → 다시 Child의 show() 호출
      • total += total * 2 → 18 + 36 = 54

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
 
    public static void main(String[] args) {
        int[] data = {3581217};
        System.out.println(func(data, 0, data.length - 1));
    }
 
    static int func(int[] a, int st, int end) {
        if (st >= endreturn 0;
        int mid = (st + end/ 2;
        return a[mid] + Math.max(func(a, st, mid), func(a, mid + 1end));
    } 
 

 

 

 

'IT 엔지니어 > 자격증' 카테고리의 다른 글

정보처리기사 실기 -3  (0) 2025.06.26
정보처리기사 실기 -2  (0) 2025.06.25
정보처리기사 실기 -1  (0) 2025.06.24
네트워크관리사 2급  (0) 2025.05.13
리눅스마스터 2급  (0) 2025.05.13