본문 바로가기

전체 글

(254)
리액트) 디스코드 클론 - 7 앞서 여태까지의 기능들을 모두 한 컴포넌트에 모았는데, 그것들을 정리해보려한다. 우선 useSocket.js 파일을 생성한다 // useSocket.js import Peer from "peerjs"; import React, { useEffect, useRef, useState } from "react"; import { io } from "socket.io-client"; import audioFrequency from "../audioFrequency"; import audioContext from "../audioContext"; var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozG; c..
파이썬) 가희와 키워드 - BOJ https://www.acmicpc.net/problem/22233 22233번: 가희와 키워드 1번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, floyd, os가 됩니다. 2번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, os가 됩니다. map은 1번째 글과 2번째 글에 중복으로 등장하였음을 www.acmicpc.net 이 문제는 중복방지를 위해 set 또는 딕셔너리를 사용해야 했다. 그러나 셋은 키워드의 삭제를 위해 또 다시 반복문을 돌려야했으므로 딕셔너리의 사용이 알맞아 보였다. import sys input = sys.stdin.readline n, m = map(int, input().split()) dic = {} for _ in range(m): st = input()..
파이선) KCPC - BOJ https://www.acmicpc.net/problem/3758 3758번: KCPC 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫 번째 줄에는 www.acmicpc.net T = int(input()) for i in range(T): # 팀의 수, 문제의 수, 내 팀 아이, 로엔트리 n, k, t, m = map(int, input().split()) dic = {} for idx in range(m): # 팀의 아이디. 문제번호, 점수 i, j, s = map(int, input().split()) if i not in dic: # 딕셔너리 저장 # 0번째는 점수 배열..
파이썬) 햄버거 분배 - BOJ https://www.acmicpc.net/problem/19941 19941번: 햄버거 분배 기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사 www.acmicpc.net from collections import deque import sys input = sys.stdin.readline n, k = map(int, input().split()) a = input() arr = list(a.strip()) stack = [] pq = deque() hq = deque() cnt = 0 for i in range(len(arr)): if arr[i] == 'H'..
파이선) 수 이어 쓰기 - BOJ https://www.acmicpc.net/problem/1515 n = input() i = 0 while True: i += 1 num = str(i) while len(num) > 0 and len(n) > 0: if num[0] == n[0]: print('if', num, n) n = n[1:] num = num[1:] if n == '': print(i) break
파이썬) 블로그 - BOJ https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net n, x = map(int, input().split()) arr = list(map(int, input().split())) left = 0 right = x max_sum = sum(arr[left:right]) left += 1 right += 1 prev_range = max_sum cnt = 1 while right max_sum: cnt = 1 max_sum = this_rang..
리액트) 디스코드 클론 - 6 이번에는 스트리밍을 만들어 볼 예정이다 우선 스트리밍 또한 화상통화와 마찬가지로 navigator.mediaDevices 로 가져온다. 다만 useMedia를 가져오는 화상통화와 달리 스트리밍은 유저의 화면을 보여주는 것이므로 getDisplayMedia를 사용하면 된다. 같은 Room.js의 JSX에 해당 코드를 추가하자 SharingStart Stop sharing 그리고 아래 코드도 추가하자 const onSharingStart = async () => { try { await navigator.mediaDevices //유저의 화면들을 가져옴 .getDisplayMedia(displayMediaOptions) .then((stream) => { //비디오 태그에 송출 streamingVideoRe..
파이썬) 영단어 암기는 괴로워 - BOJ https://www.acmicpc.net/problem/20920 import sys input = sys.stdin.readline dic = {} n, m = map(int, input().split()) for i in range(n): s = input().rstrip() if len(s) >= m: if s not in dic: dic[s] = 1 else: dic[s] += 1 arr = sorted(dic.items(), key=lambda x: (-x[1], -len(x[0]), x[0])) for i in arr: print(i[0]) 이 문제는 주어진 조건만 달성하면 무난하게 풀 수 있는 문제이다. 먼저 딕셔너리에 영단어와 그 개수를 넣는다. 넣을 때 영단어의 길이를 확인한다. 그 다..
파이썬) 어두운 굴다리 -BOJ https://www.acmicpc.net/problem/17266 17266번: 어두운 굴다리 인하대학교 후문 뒤쪽에는 어두운 굴다리가 있다. 겁쟁이 상빈이는 길이 조금이라도 어둡다면 가지 않는다. 따라서 굴다리로 가면 최단거리로 집까지 갈수 있지만, 굴다리는 어둡기 때문에 빙 www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) m = int(input()) position = list(map(int, input().split())) answer = 0 if len(position) == 1: answer = max(position - 0, n - position) else: for i in range(len(position))..
파이썬) 진우의 달 여행 (Small) - BOJ https://www.acmicpc.net/problem/17484 import sys input = sys.stdin.readline n, m = map(int, input().split()) arr = [] for i in range(n): arr.append(list(map(int, input().split()))) fuel = 1010101010101010 dy = [0, -1, 1] def dfs(x, y, p_y, fff, sums_fuel): if x == n-1: # 달에 도착했으면 현재까지의 연료 합과 여태 계산한 연료합 중 최소값 리턴 return min(sums_fuel, fff) for i in range(3): # 방향 설정 if dy[i] == p_y: # 이전에 갔었던 위치라면..
파이썬) 크로스 컨트리 - 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..