구름톤 챌린지 2주차 - 2 2023.08.24.(목) #include #define SIZE 200 int main() { int bombValue[SIZE][SIZE] = {0,}; char landState[SIZE][SIZE]; int N, K; scanf("%d %d", &N, &K); // 땅 상태 입력받기 for (int i=0; i 알고리즘/2023 구름톤 챌린지 2023.08.27
구름톤 챌린지 2주차 - 1 2023.08.21.(월) #include #include #include #include #include #include #include using namespace std; string getString(string & S, int a, int b); int main() { ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); int N; string S; cin >> N >> S; vector strings; set checkDup; // 1. 일단 가능한 문자열들 만들어서 vector에 저장하기 // 언뜻보기엔 (getString에도 반복문이 있어서) O(N^3)이지만, `temp[j-i] = S[j];`가 실행되는 횟수는 대략 1+2+...+.. 알고리즘/2023 구름톤 챌린지 2023.08.24
구름톤 챌린지 1주차 - 2 2023.08.17.(목) #include int main() { int N; scanf("%d", &N); int k[1002], max = 0, max_position = -1, sum = 0; for (int i=0; i max) { max = k[i]; max_position = i; } } int notPerfect = 0; if (max_position == 0) { for (int i = max_position + 1; i k[i-1]) { notPerfect = 1; break; } } } else if (max_position == N-1) { for (int i = max_position - 1; i > -1; i--) { if (k[i] > k[i+1]) { notPerfect = 1.. 알고리즘/2023 구름톤 챌린지 2023.08.18
구름톤 챌린지 1주차 - 1 2023.08.14.(월) #include int main() { long double W=0, R=0; scanf("%Lf %Lf", &W, &R); printf("%d", (int) ( W*(1+(R/30)) ) ); return 0; } 일단 계산을 할 때는 정확하게 계산해야해서 실수형 type의 변수를 선언하여 사용했습니다. 출력할 때는 소숫점을 바리라고 하여 (int)로 casting 후 출력했습니다. 2023.08.15.(화) #include void calculate(int *T, int *M, int c[], int size_c) { int sum = 0; for (int i=0; i 알고리즘/2023 구름톤 챌린지 2023.08.16
부스트캠프 웹・모바일 8기 챌린지 수료 후기 > 챌린지 前이제 3-1 학기를 마치고, 지금까지 나름대로 전공 공부를 열심히 했다고 생각했습니다. 아직 DB나 데이터통신 같이 배우지 못한 주요 과목도 있었지만 대부분 기초적인 CS 지식은 나름대로 잘 공부해뒀다고 생각했고, 이제 수많은 CS 관련 직종에서 어떤 분야로 진로를 정할지 고민하던 중이었습니다.그 때 부스트캠프 웹 개발 분야를 모집한다는 글을 보게 되었습니다. 앞서 말씀 드렸듯 전공 기초를 잘 닦아뒀다고 생각했기에 부스트캠프에서 웹 개발에 관련된 기술을 배워도 잘 따라갈 수 있을 것이라고 생각하고 지원하게 되었습니다.진로 분야를 완벽하게 정하진 못 했었지만, 웹 개발은 평소에도 관심이 있었기에 일단 부딪혀보자는 식으로 지원했습니다.제가 해본 경험이라곤 교내에서 한 게 대부분이었고, 다른 선배.. 후기 2023.08.13
[Network Programming] MultiTherad 기반 서버 Thread(쓰레드) (예전에 시프 공부할 때도 정리 잘 해뒀으니 이 글초반에 쓰레드 설명하는 부분이랑 같이 보면 좋음.) 쓰레드의 등장 배경 1. 프로세스의 생성은 많은 리소스가 소모된다. 2. process간 context-switching은 오버헤드가 크다.(쓰레드에 비해...) 3. 프로세스들은 메모리 공간이 독립적이라 특별한 경로가 아니면 데이터 공유가 안된다. Thread(쓰레드)는 한 Process내의 또 다른 실행 흐름이다. 구체적으로 말하자면, 쓰레드들은 Stack을 제외한 공간을 공유한다.(+ 다른 실행 흐름이니까 당연히 PC값도 다르겠지..) 한 process 내에 존재하므로 프로세스처럼 아예 다른 메모리 공간을 할당받을 필요도 없고, context-switching이 일어나도 오버헤.. 수업/Network Programming 2023.05.29
[Network Programming] 소켓과 표준 입출력(standard I/O) C standard에 정의된 I/O 함수를 사용하면 다음과 같은 장점이 있다. (ex. fprintf) 1. Portability에 좋다. 2. 버퍼링을 통한 성능 향상에 도움이 된다. 소켓을 만들면 기본적으로 kernel에서 버퍼를 만든다. 그게 위 그림의 우측에 보이는 소켓 버퍼이다. TCP 소켓은 오류가 발생하면 데이터 재전송도 해야 되고 하니 이런 버퍼가 꼭 필요하다. 그렇다고 UDP 소켓엔 버퍼가 없는건 아니다. 데이터를 보낼 때도 잠시 담아둬야 할 수도 있고, 받을 때도 application에서 읽기 전까지 잠시 담아둬야 할 수도 있으니 UDP 소켓에서도 버퍼는 필요하다. 그런데 standard I/O 함수는 내부적으로 응용 계층에서 버퍼를 또 사용한다. 즉, 표준 입출력 함수를 사용하면 위 .. 수업/Network Programming 2023.05.29
[Network Programming] Multicast & Broadcast > Multicast Multicast 데이터 전송 방식 - 특정 Multicast 그룹을 대상으로 데이터를 딱 한번 전송 - 그럼 해당 그룹에 속하는 client는 모두 데이터를 수신한다. - Multicast 그룹 수는 IP 주소 범위 내에서 얼마든 추가 가능 - 특정 Multicast 그룹으로 전송되는 데이터를 수신하려면 거기에 가입하면 된다. - Multicast에선 연결의 개념이 없으므로 UDP socket을 기반으로 전송 - 모든 host에 데이터를 전송해야할때 그냥 TCP나 UDP를 쓰는 것보다 트래픽 양 ↓ 앞서 IPv4 주소를 설명할 때, Class D(224.0.0.0~239.255.255.255)의 주소들이 Multicast를 위한 주소라고 했다. 여기서 각 IP 주소가 각 Multi.. 수업/Network Programming 2023.05.29
[Network Programming] 다양한 IO Functions send & recv #include ssize_t send(int sockfd, const viod * buf, size_t nbytes, int flags); ssize_t recv(int sockfd, viod * buf, size_t nbytes, int flags); read/write와 달리 send와 recv는 소켓 전용 입출력 함수이다.(TCP 전용! UDP에서 쓰려면 주소 정보관련 인자도 있어야 함, recvfrom()/sendto() 처럼...) read/write랑 마지막 인자로 int flags가 추가된 것 말곤 다를게 없다. 따라서 flags 인자에 사용할 수 있는 옵션과 그 의미에 대해 알아보자. bitwise-or(|) 연산자로 여러 옵션을 선택할 수도 있다. OS에 따라 옵션.. 수업/Network Programming 2023.05.29
[Network Programming] IO Multiplexing 기반 서버 MultiProcess 서버는 아래와 같은 단점을 가진다. 1. process의 빈번한 생성은 성능 저하로 이어진다. 2. MultiProcess의 흐름을 고려해야하므로 구현이 쉽지 않다. 3. 만약 process간 통신까지 해야한다면 구현이 더 복잡해진다. 따라서 하나의 process가 다수의 client에게 서비스를 제공할 수 있는, 하나의 process가 여러 개의 소켓을 핸들링 할 수 있는 IO MultiPlexing이 그 대안이다. (물론 무거운 작업이면 process 하나가 따로 해주는게 맞다고 교수님께서 말씀하심) 데이터 송수신이 무조건 실시간으로 0의 지연시간을 가져아하는 것은 아니므로 멀티플렉싱이 가능하다. 이를 위한 기능을 하나씩 배워보자. select() 함수를 사용하면 멀티플렉싱 서.. 수업/Network Programming 2023.05.29