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] == 0) continue;
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;
}
y=0 x=1
i=0,1 j=0,1,2
1110
1110
0000
0000
y=0 x=3
i=0,1 j=2,3
1121
1121
0000
0000
y=1 x=3
i=0,1,2 j=2,3
1132
1132
0011
0000
y=2 x=0
i=1,2,3 j=0,1
1132
2232
1111
1100
y=2 x=1
i=1,2,3 j=0,1,2
1132
3342
2221
2210
y=2 x=2
i=1,2,3 j=1,2,3
1132
3453
2332
2321
y=3, x=1
i=2,3 j=0,1,2
1132
3453
3442
3431
y=3, x=2
i=2,3 j=1,2,3
1132
3453
3553
3542
y=3, x=3
i=2,3 j=2,3
1132
3453
3564
3553
합집합 | U |
---|---|
차집합 | - |
카티션프로젝트 | X |
프로젝트 | π |
조인 | ⋈ |
디자인패턴
: 소프트웨어 공학과 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴.
생성패턴
Abstract Factory 추상 팩토리
: 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스.
Builder 빌더
: 복잡한 인스턴스를 조립해서 만드는 구조.
Factory method 팩토리 메소드
: 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하는 방식.
Prototype 프로토타입
: 처음에 일반적인 원형을 만들어 놓고 복사한 후 필요한 부분만 수정해서 사용하는 패턴.
Singleton 싱글톤
: 전역 변수를 사용하지 않고 객체를 하나만 생성하여, 어디서든 참조할 수 있도록 하는 패턴.
구조패턴
Adapter 어댑터
: 인터페이스로 인해 함께 사용하지 못하는 클래스를 함께 사용하도록 하는 패턴.
Bridge 브릿지
: 추상과 구현을 분리해서 결합도를 낮춘 패턴.
Composit 컴포지트
: 개별 객체와 복합 객체를 클라이언트에서 동일하게 사용하도록 하는 패턴.
Decorator 데코레이터
: 소스를 변경하지 않고 기능을 확장하는 패턴.
Facade 퍼샤드
: 하나의 인터페이스를 통해 느슨한 결합을 제공하는 패턴.
Flyweight 플라이웨이트
: 대량의 작은 객체들을 공유하는 패턴.
Proxy 프록시
: 대리인이 대신 그 일을 처리하는 패턴.
행위패턴
Command 커맨드
: 요청 자체를 캡슐화해 파라미터로 넘기는 패턴.
Observer 옵저버
: 상태가 변할 때 의존자들에게 알리고 자동으로 업데이트하는 패턴.
Templet Method 템플릿 메소드
: 알고리즘 골격의 구조를 정의한 패턴.
Mediator 중재자
: 객체 간 상호작용을 캡슐화한 패턴.
Interpreter 통역사
: 언어 규칙 클래스를 이용하는 패턴.
Iterator 이터레이터
: 내부 표현은 보여주지 않고 순회하는 패턴.
State 상태
: 객체 내부 상태에 따라서 행위를 변경하는 패턴.
Vistor 방문자
: 오퍼레이션을 별도의 클래스에 새롭게 정의한 패턴.
Strategy 전략
: 다양한 알고리즘을 캡슐화해 알고리즘 대체가 가능하도록 하는 패턴.
Memento
: 상태 값을 미리 저장해두었다가 복구하는 패턴.
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]);
}
}
arr[0] <arr[0] result[0]= 1
arr[0] <arr[1] result[0]= 1
arr[0] <arr[2] result[0]= 1++
arr[0] <arr[3] result[0]= 2
arr[0] <arr[4] result[0]= 2
2
arr[1] <arr[0] result[1]= 1++
arr[1] <arr[1] result[1]= 2
arr[1] <arr[2] result[1]= 2
arr[1] <arr[3] result[1]= 2++
arr[1] <arr[4] result[1]= 3++
4
arr[2] <arr[0] result[2]= 1++
arr[2] <arr[1] result[2]= 2++
arr[2] <arr[2] result[2]= 3
arr[2] <arr[3] result[2]= 3++
arr[2] <arr[4] result[2]= 4++
5
arr[3] <arr[0] result[3]= 1
arr[3] <arr[1] result[3]= 1
arr[3] <arr[2] result[3]= 1
arr[3] <arr[3] result[3]= 1
arr[3] <arr[4] result[3]= 1
1
arr[4] <arr[0] result[4]= 1++
arr[4] <arr[1] result[4]= 2
arr[4] <arr[2] result[4]= 2
arr[4] <arr[3] result[4]= 2++
arr[4] <arr[4] result[4]= 3
3
서브넷마스크 : 11111111.11111111.11111111.11000000
11000000 >> 비트 수 2
네트워크 분할 2^2 = 4
네트워크 1개당 256/4 = 64
-> 0 : 네트워크 대표주소, 256 :
첫번째 네트워크 1~63
두번째 네트워크 64~127
세번째 네트워크 128~191
네번쨰 네트워크 192~255
브로드캐스트 마지막 IP
두번째 브로드캐스트 192.168.1.127 (답)