#include <stdio.h>
void func(char *d, char *s) {
int sum = 0;
while (*s) {
*d = *s;
d++;
s++;
}
*d = '\0';
}
int main() {
char *str1 = "first";
char str2[50] = "teststring";
int result = 0;
func(str2, str1); // 문자열 복사 함수
for (int i = 0; str2[i] != '\0'; i++) {
result += i;
}
printf("%d", result);
return 0;
}
🖍 10
문자열 복사와 배열을 순회하면서 인덱스를 더하는 프로그램.
main
함수에서str1
은 문자열 리터럴 "first"를 가리키고 있고,str2
은 문자열 "teststring"로 초기화 됨.
▪️str1 = "first"
▪️str2 = "teststring"
func(str2, str1);
를 호출하면,d
는str2
배열을,s
는str1
을 가리킴.func(char *d, char *s)
함수의while (*s)
루프는s
가 가리키는 문자가 널(\0
) 문자가 아닐 동안 반복.
▪️*d = *s;
에 의해s
가 가리키는 문자인 "first"의 문자가d
가 가르키는str2
배열의 각 위치에 복사됨.
▪️ 루프 실행 과정:
- 첫 번째 반복:*d = *s
는 'f'를str2[0]
에 복사 →str2
는 "feststring"
- 두 번째 반복: 'i'를str2[1]
에 복사 →str2
는 "fiststring"
- 세 번째 반복: 'r'를str2[2]
에 복사 →str2
는 "firtstring"
- 네 번째 반복: 's'를str2[3]
에 복사 →str2
는 "firsstring"
- 다섯 번째 반복: 't'를str2[4]
에 복사 →str2
는 "firsttring"- 다섯 글자의 복사가 끝난 후,
*s
가 널(\0
) 문자가 되면서 루프가 종료됨. 마지막으로*d = '\0';
에 의해 str2 배열의 다음 위치에 널 문자가 들어가서 문자열이 정상적으로 끝남.
▪️str[5]
= 널(\0
) 문자가 되면서 문자열 종료.- 최종적으로,
str2
는 "first"가 됨.for
문에서str2
문자열의 각 문자를 순차적으로 순회하면서, 인덱스i
의 값을result
에 더함.
▪️str2
가 "first"로 변경되었으므로, 이 루프는i = 0
부터i = 4
까지 실행됨.
▪️result
= 0 + 1 + 2 + 3 + 4 = 10
interface Number {
int sum(int[] a, boolean odd);
}
public class Main {
public static void main(String[] args) {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
OENumber OE = new OENumber();
System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
}
}
class OENumber implements Number {
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i=0; i < a.length; i++) {
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
}
🖍 25, 20
홀수, 짝수 각각의 합 구하는 프로그램
Number
라는 인터페이스와OENumber
라는 클래스를 정의하여, 특정 조건에 따라 배열에서 홀수 또는 짝수만을 골라 그 합을 구하는 구조로 되어 있다.
1.Number
인터페이스:
sum
이라는 메서드를 정의. 이 메서드는 배열a
와boolean odd
를 매개변수로 받아int
값을 반환하는데, 배열에서 홀수나 짝수만 골라 그 합을 반환하는 기능을 구현하도록 설계되었음.
2.OENumber
클래스:Number
인터페이스 구현.
▪️odd
가true
일 때는 홀수인 경우a[i] % 2 != 0
만 더함. (a[0]=1
일 때,1 % 2 !=0
는true
)
result
= 1 + 3 + 5 + 7 + 9 = 25
▪️odd
가false
일 때는 홀수인 경우a[i] % 2 != 0
만 더함.
result
= 2 + 4 + 6 + 8 = 20
다음 라우터 A에서 라우터 F까지 경로를 설정하기 위해 RIP 방식을 사용한다고 할 때, 라우터가 지나가는 경로를 순서대로 쓰시오.(단, 간선 위의 숫자는 라우터 간의 거리를 의미한다.)
🖍 A → D → C → F
RIP 최단 경로
- 홉 수(hop count)가 가장적은 경로
*홉 수는 라우터가 목적지까지 가는 데 거쳐야 하는 라우터의 수를 의미- (홉 수 동일하다면)비용이 적은 경로
- 홉 수가 15를 넘기면 불가능한 경로로 판단
🖍 AES
#include <stdio.h>
int main() {
int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int* parr[2] = {arr[1], arr[2]};
printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
return 0;
}
🖍 21
2차원 배열
arr[3][3]
은 3x3 배열 :arr[0]: 1 2 3 arr[1]: 4 5 6 arr[2]: 7 8 9
parr
는 포인터 배열parr[0]: arr[1] -> {4, 5, 6} parr[1]: arr[2] -> {7, 8, 9}
parr[1][1]
==arr[2][1]
: 8*(parr[1]+2)
==arr[2][2]
: 9**parr
==arr[1][0]
: 4
*parr
는parr[0]
을 가리키고,parr[0]
은arr[1]
을 가리킴.
- ∴ 8 + 9 + 4 = 21