본문 바로가기

분류 전체보기

(257)
파이썬) 크로스 컨트리 - BOJ (다시풀어야함) https://www.acmicpc.net/problem/9017 9017번: 크로스 컨트리 입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 케이스로 주어진다. 입력 파일의 첫 번째 줄에 테스트 케이스의 수를 나타내는 정수 T 가 주어진다. 두 번째 줄부터는 두 줄에 하나의 www.acmicpc.net 해당문제는 구현에 충실하면 충분할 수 있는 문제라고 생각했다. from collections import Counter tc = int(input()) answer = [] def solution(): n = int(input()) arr = list(map(int, input().split())) # 팀별 참가자 수 teams = Counter(arr) dic = {} point = 1 for..
리액트) 디스코드 클론 - 5 이번 포스팅부턴 본격적으로 주 기능들을 만들어보려 한다. 우선 디스코드의 주 기능들은 다음과 같다 채널 내 메세지 소통 채널 내 음성대화 채널 내 화상채팅 채널 내 스트리밍 등등 더 많은 기능이 있지만 우선 저 네개를 목표로 잡으려 한다. 우선 음성채팅부터 만들어보겠다. 오디오 기능을 만들기 위해선 우선 컴퓨터에 연결된 마이크를 가져와야한다. 그 기능을 담당하는 것이 바로 navigator.mediaDevices.getUserMedia()이다. (더 자세한 사항은 MND 홈페이지 참조) Room.js를 수정하자 import React, { useEffect, useRef } from "react"; import { io } from "socket.io-client"; import Peer from "pe..
파이썬) 스위치 켜고 끄기 - BOJ https://www.acmicpc.net/problem/1244 1244번: 스위치 켜고 끄기 첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 www.acmicpc.net n = int(input()) arr = list(map(int, input().split())) arr = [-1] + arr m = int(input()) stu = [] def male(num): for i in range(1, n+1): if i % num == 0: if arr[i] == 1: arr[i] = 0 else: arr[i] = 1 def female(num): if ar..
리액트) 디스코드 클론 - 4 이번 포스팅에는 peer-to-peer 에 대해 알아볼 것이다. 소켓만 알면 되지 굳이 peer까지 알아야 돼? 라고 생각할 수 있다. 하지만 peer는 웬만한 웹소켓을 사용하는 기술에서는 필수요소이다. 우선 webRTC부터 살펴보자. MND에서는 webRTC를 다음과 같이 정의하고 있다. WebRTC (Web Real-Time Communication)은 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐만 아니라, 임이의 데이터도 교환할 수 있도록하는 기술입니다. WebRTC를 구성하는 일련의 표준들은 플러그인이나 제 3자 소프트웨어 설치 없이 종단 간 데이터 공유와 화상 회의를 가능하게 합니다. 이를 위하여 WebRTC는 상호 연관된 API와 ..
리액트) 디스코드 클론 - 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