Programming84 [C] C언어 멀티 프로세스 채팅 서버 만들기 지난번에 멀티 스레드 채팅 서버를 만든 적이 있다. (궁금하면 여기를 참고) 이번 포스팅은 멀티 프로세스 채팅 서버를 C로 구현해봤다. (사실 친구의 수업에서 진행하는 프로젝트인데 재미있어 보여서 따라 했다.) C언어 + fork의 조합 때문에 전체적인 코드가 길어지기 때문에 주요 로직에 대해서만 정리를 해야겠다. 서버 코드 서버의 코드에서 사용한 공유 메모리 종류이다. 전체적인 채팅 알고리즘을 아래와 같이 설계했다. - 메세지 헤더, 메세지 유저, 메세지 데이터에 해당하는 공유메모리 영역을 선언한다. - 메세지 헤더에는 현재 메세지의 번호가 담기며, 코드를 실행하면 0으로 초기화된다. - 메인 코드 : 클라이언트 들의 접속을 허가하고 fork를 통해 채팅 알고리즘을 수행하는 프로세스를 생성한다. - 채.. Programming/Multi Process TCP server_C 2019. 12. 10. [백준] 1541번 잃어버린 괄호 Python 해설 (그리디 알고리즘) 출처 : https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. www.acmicpc.net 그리디 알고리즘으로 분류된 문제이다. 코딩 테스트나 알고리즘 경진대회에서 해당 알고리즘이 나온다면 확실하게 점수를 가져가야 한다!! 그리 어렵지 않은 알고리즘이니 쉽게 문제를 풀어보자 풀이 여기에 그리디 알고리즘에 대해서 언급한 적이 있다. 간단하게 가장 좋은 선택을 알고리즘이라고 생각한다. "잃어버린 괄호" 문제는 가장 최.. Programming/Algorithm 2019. 12. 8. [백준] 2661번 좋은수열 Python 해설 (백트래킹 알고리즘) 출처 : https://www.acmicpc.net/problem/2661 2661번: 좋은수열 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다. www.acmicpc.net 백트래킹 알고리즘으로 분류된 문제이다. 코딩 테스트를 몇 차례 보면서 탐색, 백트래킹 쪽 문제에 약하다는 걸 알고 관련 문제를 많이 풀어보려고 하는 중이다. 풀이 입력받은 자릿수만큼의 길이가 될 때까지 깊이 우선 탐색을 진행하게 된다. 깊이 우선 탐색만 예를 들면 n = 7일 경우 첫 결과는 1111111이 된다. (최솟값 우선 조건 적용) 하지만 백트래킹 알고리즘을 적용하여 깊이 우선 탐색에 조건을.. Programming/Algorithm 2019. 12. 7. [Go] 12. Go(golang)의 메소드(method) 이전 공부에서 golang의 구조체에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체의 메소드에 관한 내용이다. 메소드 객체지향 언어에서 특정 속성들의 기능을 수행하기 위해 만들어진 특별한 함수를 "메소드"라고 한다. Go 언어는 객체지향 언어이지만 필드와 메소드를 묶어서 정의하는 클래스가 없다. Go 언어에서 메소드를 구조체 내부에서 정의하지 않고 구조체 밖에 일반 함수처럼 별도로 선언한다. Go언어의 메소드 Go언어에서 메소드를 선언하는 문법은 일반 함수를 선언하는 문법과 차이가 있다. - 기본 함수 선언 문법 func 함수 이름(매개변수 이름 매개변수형) 반환 형{ ` ` ` - 메소드 선언 문법 func (매개변수이름 구조체 이름) 메소드 이름() 반환형 { ` ` ` 메소드에서도 기본 함수에서.. Programming/GO 2019. 12. 7. [Go] 11. Go(golang)의 구조체(struct) 이전 공부에서 golang의 익명 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체에 관한 내용이다. 요즘 준비할 게 많아서 설명은 주석으로 대체하겠다. 구조체 관련 코드 및 설명 package main import "fmt" type student struct { name string age int phone string } type test struct { num int } func callByreference(t *test) { t.num += 10 } func callByvalue(t test) { t.num += 10 } func main() { var stu1 = student{} fmt.Println(stu1) //구조체에 멤버변수가 0으로 초기화되어있지 않기 때문에 "{ 0 }"이 .. Programming/GO 2019. 12. 5. [백준] 1717번 집합의 표현 Python 해설 출처 : https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1≤n≤1,000,000), m(1≤m≤100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 1 a b의 형태로 입력이 주어진다. 이는 a와 b가 같은 집합에 포함되어 있는지를 확인하는 연산이다. a www.acmicpc.net Disjoint-set 알고리즘으로 분류된 문제이다. N사에 떨어졌다고 생각하고 K사 채용연계형 인턴 정형의 코딩 테스트를 .. Programming/Algorithm 2019. 11. 24. [Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 2 기본 코드에 조금 더 살을 붙여서 CLI환경에서 단채 채팅방 환경을 구축했다. 아직 최적화시킬 부분도 남았고, slack처럼 늦게 들어와도 채팅방의 기록을 볼 수 있게 구축하고 싶기 때문에 시간이 남으면 세 번째 작업도 진행할 예정이다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def msg_func(msg): print(msg) for con in user_list.values(): try: con.send(msg.encode('utf-8')) except: print("연결이 비 정상적으로 종료된 소켓 발견") def.. Programming/Multi thread TCP server_Python 2019. 11. 23. [Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 1 N사 최종 면접 후 멀티 스레드에 대한 이론은 있지만 실전에 약하다는 느낌을 받았다. 아무래도 멀티 스레드 환경에서 프로그래밍을 할 경험이 없어서 더 그런 것 같다. 그! 래! 서! 혼자서라도 멀티 스레드 채팅 서버를 구축해보는 프로젝트를 진행하려고 한다. 기본 코드 Python 게시판에 올려두었던 서버, 클라이언트 코드를 조금 변조해서 뼈대가 될 코드를 작성하였다. - 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def handle_receive(client_socket, addr, user): while 1: data =.. Programming/Multi thread TCP server_Python 2019. 11. 20. [백준] 11003번 최솟값 찾기 Python 해설 출처 : https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 슬라이딩 윈도우 알고리즘으로 분류된 문제이다. 열몇 번의 시도만에 풀었다.. 풀이 - Python 정답 코드 from collections import deque n, l = map(int, input().split()) arr = [*map(int, input().split())] m = deque() for i in range(n): tmp = arr[.. Programming/Algorithm 2019. 11. 18. [백준] 10868번 최솟값 Python 해설 출처 : https://www.acmicpc.net/problem/10868 10868번: 최솟값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자. 여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최솟값을 찾아야 한다. 각각의 정수들은 www.acmicpc.net 세그먼트 트리에 입문하기 위해 딱 좋은 문제라고 생각한다. 풀이 - Python 정답 코드 import sys from mat.. Programming/Algorithm 2019. 11. 18. [Python] 멀티 스레드 소켓 서버 구축하기 내가 한 번도 경험하지 못했던 "멀티 스레드 서버 프로그래밍"을 시작하기에 앞서 뼈대가 될 코드를 만들었다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 def handle_client(client_socket, addr): print("접속한 클라이언트의 주소 입니다. : ", addr) user = client_socket.recv(1024) string = "안녕하세요? %s 님"%user.decode() client_socket.sendall(string.encode()) print("1초 후 클라이언트가 종료됩니다.") time.sleep(1) client_socket... Programming/Python 2019. 11. 18. [Python] 파이썬 소켓 서버 프로그래밍 나는 개발자가 되기에 아직 많이 부족하다는 것을 느끼고 조금 더 열심히 살기로 다짐했다. 오늘은 파이썬으로 에코 서버를 TCP타입 소켓 통신을 통해 만들었다. 코드와 함께 간단한 주석으로 설명을 대체할 것이다. 사실 진짜 만들고 싶었던 건 내가 계속되는 질문에도 답을 못 했었던 스레드를 이용한 서버이다. 이번 건 맛 보기라는 뜻이다! 서버 코드 import socket host = "127.0.0.1" port = 9123 #IPv4 체계, TCP 타입 소켓 객체를 생성 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #포트를 사용 중 일때 에러를 해결하기 위한 구문 server_socket.setsockopt(socket.SOL_SO.. Programming/Python 2019. 11. 17. 이전 1 2 3 4 5 6 7 다음