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[] = {5, 2, 7, 4, 1, 8, 3, 6, 9};
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
- 이제 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 = {3, 5, 8, 12, 17};
System.out.println(func(data, 0, data.length - 1));
}
static int func(int[] a, int st, int end) {
if (st >= end) return 0;
int mid = (st + end) / 2;
return a[mid] + Math.max(func(a, st, mid), func(a, mid + 1, end));
}
|
'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 |