본문 바로가기

분류 전체보기

(253)
리액트) 디스코드 클론 - 3 저번 포스팅에선 클라이언트와 서버의 셋팅을 진행했었다. 이번에는 웹 소켓의 기본 사용법을 알아보자. 그 전에 우선 클라이언트의 전체적인 부분을 변경할 것이다. //App.js import React from "react"; import Home from "./Home"; import { Routes, BrowserRouter, Route } from "react-router-dom"; import Room from "./Room"; const App = () => { return ( ); }; export default App; //Home.js import React from "react"; import { useNavigate } from "react-router-dom"; import { v4 as..
리액트) 디스코드 클론 - 2 이전 글에서는 서버의 기본 세팅을 마련했다. 이제 소켓 연결에 대한 코드를 작성해보자. io.on("connection", (socket) => { console.log("connection!!!!"); }); 끝이다. 엥? 이라는 의문이 들 수도 있겠지만 단순한 클라이언트-서버간의 웹소켓 연결이라면 정말 이게 끝이다. 나는 클라이언트에서 피어를 생성하고 다른 이용자와 연결을 진행할 예정이기에 서버는 단순 중계기 같은 역할만 진행한다. 클라이언트 - 핸드폰, 서버 - 중계기 와 비슷하다가 생각하면 된다. 이제 클라이언트 쪽을 작성해보자. npm i socket.io-client peerjs react-router-dom uuid import React, { useEffect } from "react"; ..
리액트) 디스코드 클론 - 1 이 프로젝트를 시작하는 이유 프로젝트 진행 중 정말 오랜만에 웹소켓을 다루게 되었다. 프로젝트를 진행하며 웹소켓에 대해 자세히 공부하게 되었고 그를 이용해 다양한 기능을 구현하고 싶었다. 웹소켓이 뭔데? WebSocket은 클라이언트와 서버를 연결하고 실시간으로 통신 가능하도록 하는 첨단 기술이다. 이것의 장점은 HTTP에서 발생하는 것처럼 별도의 요청을 보내지 않고도 데이터를 수신할 수 있다는 점이다. WebSocket의 동작 클라이언트와 서버 간의 연결은 당사자 중 하나에 의해 종료되거나 시간 초과에 의해 닫힐 때까지 열린 상태로 유지된다. 클라이언트와 서버 간의 연결을 설정하기 위해서는 핸드셰이크를 수행한다. 연결이 설정된 이후로는 열린 상태로 유지되며 클라이언트 또는 서버 측에서 연결이 종료될 때..
파이썬) 등수 구하기 https://www.acmicpc.net/problem/1205 1205번: 등수 구하기 첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보 www.acmicpc.net n, point, p = map(int, input().split()) if n point: person -= 1 rank += 1 if person
파이썬) 쿠키의 신체 측정 - BOJ https://www.acmicpc.net/problem/20125 n = int(input()) head = [] heart = [] left_arm = 0 right_arm = 0 mid = 0 left_leg = 0 right_leg = 0 for i in range(n): string = input() for j in range(len(string)): if string[j] == '*': if head == []: # 헤드를 발견하지 못햇다면 # 맨처음 *은 무조건 헤드임 head = [i, j] else: if heart == []: # 하트가 비엇다면 왼쪽팔이나 하트라는 뜻 if head[1] == j: # 헤드 바로 아래, 즉 하트라면 하트 위치 저장 heart = [i, j] else: ..
파이썬) 임스와 함께하는 미니게임 https://www.acmicpc.net/problem/25757 dic = {} user_input = input() n, m = user_input.split() n = int(n) for _ in range(n): s = input() if s not in dic: dic[s] = 1 cnt = 0 if m == 'Y': cnt = 1 elif m == 'F': cnt = 2 else: cnt = 3 arr = list(dic.keys()) print(len(arr) // cnt) 해당 문제는 셋 또는 딕셔너리를 사용하면 되는데, 나는 좀 더 익숙한 딕셔너리를 사용했다.
파이썬) 비밀번호 발음하기 - BOJ https://www.acmicpc.net/problem/4659 4659번: 비밀번호 발음하기 좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp www.acmicpc.net while True: st = input() if st == 'end': break q = [] aeiou = 'aeiou' others = 'bcdfghjkmnlpqrstvwxyz' is_aeiou = False is_accept = False for i in st: if i in aeiou: is_aeiou = True if len(q) == 0: q.append(i) else: f = ..
파이썬) 돌 게임 - BOJ https://www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net n = int(input()) if n % 2 == 0: print("CY") else: print("SK") 사실 n이 4부터 8까지 혹은 그 이전까지만 생각해봐도 답은 금방 나온다 조금 단순하게 생각해보자 n이 4일때 상근이가 한개 또는 세개를 가져면 나머지는 3개 이하므로 상근이가 무조건 패배한다 반면 n이 5일땐 상근이가 하나만 가져가면 상근이가 이긴다. 즉, 먼저 가져가는 사람이 이긴다 n이 6일땐 상근이가 3개를 가져가면 3개가 남아 패배하고, 1개를 가져가면 이 5 이므로 5부터 먼저 가져 갈 창영이가 우..