분류 전체보기 81

Observer

Observer 패턴"관찰 대상의 상태가 변화하면 관찰자에게 알려준다."NumberGenerator는 Observer를 저장하는 arrayList를 갖는다. 그리고 추가, 저장, notifyObserver()메소드를 가지고있다. 또 추상클래스인데, getNumber(), execute() 메소드를 추상메소드로 갖는다. NumverGenerator 클래스를 상속 받아 RandomGenerator 클래스가 나온다. 이 클래스는 execute, getNumber 메소드를 구현한다. execute() 메소드는 Random 수를 this.number 필드에 저장하고, NumberGenerator의 notifyObserver() 메소드를 호출한다. notityObserver() 메소드는 NumberGenerator..

BACK_END 2018.05.09

Observer 패턴

Observer 패턴"관찰 대상의 상태가 변화하면 관찰자에게 알려준다." NumberGenerator는 Observer를 저장하는 arrayList를 갖는다. 그리고 추가, 저장, notifyObserver()메소드를 가지고있다. 또 추상클래스인데, getNumber(), execute() 메소드를 추상메소드로 갖는다. NumverGenerator 클래스를 상속 받아 RandomGenerator 클래스가 나온다. 이 클래스는 execute, getNumber 메소드를 구현한다. execute() 메소드는 Random 수를 this.number 필드에 저장하고, NumberGenerator의 notifyObserver() 메소드를 호출한다. notityObserver() 메소드는 NumberGenerato..

BACK_END 2018.04.25

State 패턴

State 패턴state 패턴은 너무 복잡하여 클래스의 메소드 호출 순서를 나열하려고 한다. state 패턴은 말 그대로 '상태'를 표현 하는 패턴을 말한다. 이때 상태란 사물의 모양이나 형편을 의미한다. 상태를 클래스로 만듬으로 상태의 변화를 관리하고 새로운 상태를 추가할 수 있다. 그때 어떤 것을 프로그래밍 해야할지 명확해 질것이다.책에는 금고관리 프로그램의 패턴에 대해 이이야기 하고 있다. 메소드 호출 순서는 다음과 같다. Main class에서 SafeFrame class의 setClock(hour) 메소드를 호출한다. SafeFrame class의 setClock 메소드는 현재시간을 출력하고, state인터페이스의 doClock(this, hour) 메소드를 실행한다.state 인터페이스는 Da..

BACK_END 2018.04.25

TCP 통신

TCP 통신TCP 헤더 및 제어 플래그 구조3-way handshakingclinent와 server가 TCP 통신을 하기위해서 3-way handshaking을 거친다. 방식은 다음과 같다.client가 연결을 요청하는 SYN=1을 server에 보낸다. (SYN은 TCP 패킷 TCP 헤더의 flag이다.)server는 clinent의 요청을 받으면 SYN,ACK를 함께 client에 보낸다.clinent는 ACK를 보낸다.위의 방법은 통신전 초기화를 위해 4-way handshaking를 사용한다. 4-way handshaking통신을 종료하고자 하는 clinent가 server에게 FIN패킷을 보내고 자신은 FIN_WAIT_1 상태로 대기한다.FIN패킷을 받은 server는 CLOSE_WAIT로 바..

COMPUTER_SCIENCE 2018.04.24

CPU 스케줄링

CPU 스케줄링프로그램이 메모리에 올라가면 PC(프로그램 카운터)라는 이름의 레지스터가 현재 CPU에서 수행할 메모리의 주소값을 가지고 있는다. 그러면 CPU는 PC가 가진 메모리 주소를 하나씩 실행 시킨다. 프로그램 실행과 관련한 기계어 명령CPU 내에서 수행되는 명령ADD - CPU내의 레지스터에 있는 2개의 값을 더해 레지스터에 저장하는 명령이다. 수행속도가 매우 빠르다.메모리 접근을 필요로 하는 명령LOAD - 메모리의 데이터를 CPU로 읽어 들이는 명령이다.Store - CPU에서 계산된 값을 메모리에 저장하는 명령이다.비교적 빠르다.입출력을 동반한 명령시간이 오래걸린다.CPU burst - 사용자 프로그램이 CPU를 직접 가지고 빠른명령을 수행하는 단계I/O burst - I/O요청이 발생해 ..

COMPUTER_SCIENCE 2018.04.24

10974_모든순열

10974_모든순열기본적인 n을 입력하고 n까지의 모든 순열을 구하는 문제이다. 대부분 next_permutation으로 풀었지만 dfs로 풀어봤다. 코드는 다음 그림을 그리게 된다.visited[1] = 1dfs(1)visited[2] = 1dfs(2)visited[3] = 1dfs(3)visited[3] = 0visited[2] = 0visited[1] = 0한번 방문한 곳은 1로 저장하고, 다음 번 방문시 방문한 곳은 다시 가지 않는다.code #include #include #include #include using namespace std; ​ int num; int visited[10]; int arr[10]; ​ void dfs(int number, int index){ arr[index] ..

ALGORITHM 2018.04.21

1057_토너먼트

1057_토너먼트다음 라운드의 수 = 8/2 + 8%2 라는 식을 알아야 한다.라운드의 수가 같아지면 경기를 한다.위의 방법을 어떻게 알 수 있었을까?시뮬레이션 문제라고 해서 직접 다 해보려고 했다. 하지만 적절한 자료구조와 알고리즘이 생각나지 않았다.그래서 이 문제에는 다음 라운드와 경기를 하게되는 규칙이 있었다.처음에 정해진 순서 index는 여러가지 정보를 가지고 있다.다음 라운드에서 몇번째 순서인지누구와 경기를 하는지위 정보들을 파악하면서 규칙을 찾게 된 것같다.1,2가 경기를 한다 그리고 승자는 다시 1이된다.3,4가 경기를 한다 그리고 승자는 2가 된다.5,6이 경기를 한다. 승자는 37,8 -> 49,10 ->511,12 ->6규칙이 보이게된다.

ALGORITHM 2018.04.20

1966_프린터 큐

1966_프린터 큐인쇄물을 몇번째에 출력하게 되는지 묻는 문제이다.index와 value를 가진 pair를 queue에 넣는다.입력한 값을 vector에 넣은 다음 정렬한다.규칙에 맞게 프린트하고, 맨뒤로 보내고를 반복하다가 입력한 index가 나오면 지금까지 출력한 횟수를 나타내고 종료한다.code #include #include #include #include #include ​ using namespace std; ​ ​ int main() { int T; cin >> T; while(T--){ int len, index; vector maxVector; pair p1; queue q1; cin >> len >> index; for(int j=0;j> number; maxVector.push_bac..

ALGORITHM 2018.04.18

sw_1209_SUM

SW_1209_SUM숫자만들기에 이은 문제였기에 재귀를 이용해서 풀었는데 굳이 그럴 필요가 없었다. 그래도 재귀를 이용해서 풀었다. 로직은 다음과 같다.// // sw_1209_Sum.cpp // cpp // // Created by 박종훈 on 2018. 4. 6.. // Copyright © 2018년 박종훈. All rights reserved. // ​ #include #include #define INF 2e9 ​ using namespace std; ​ int arr[100][100]; int MAX; ​ // direction은 행의 합을 구할 것인지, 열의 합을 구할 것인지 구별하기 위해 사용했다. void sum(int x, int y, int now, int direction) { //..

ALGORITHM 2018.04.17

sw_1226_미로1

sw_1226 미로1DFS를 이용해서 미로의 길을 찾는 문제이다.입력버퍼DFS - 방문했던 곳은 다시 방문하지 않아도 된다.CODE입력버퍼cpu가 사용자의 입력을 그때그떄 처리하면 무리가 간다. 그래서 버퍼에 저장하고 있다가 사용자의 입력이 끝나면 데이터를 가져온다. 데이터를 가져오는 함수가 scanf, cin, getline 등 이다. 사용자가 입력을 하면 입력한 문자는 stdin이라는 버퍼에 저장된다. 그리고 '\n' 개행문자를 입력하면 사용자가 입력이 끝났다고 생각하고 scanf함수가 데이터를 cpu로 가져온다. 하지만 만약 scanf("%d", &number); 함수를 호출하면 버퍼에 저장된 '1234592\n' 중 '\n'을 제외한 1234592를 cpu로 가져오게된다 그렇게 되면 다음 줄에 한..

ALGORITHM 2018.04.12